|
i want to work in c# with opengl. but here is a problem which i have found. from nehe website i have read that install sdl and then add dll of system, tao.opengl, sdldotnet, tao.windows.form. but when i run the example of nehe website. it threws an exception of video that type initialization exception.
if anyone knows that kindly reply me.
|
|
|
|
|
If you don't tell us the exact exception and message, then how should we be able to help you?
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Why not raise this on the nehe forums? It sounds like the type of thing that they should be able to deal with.
|
|
|
|
|
Hello Friends,
I am developing an windows application in C#.NET using SQL Server 2000. As i have several form in my application and i have to declare connection string on each form. Now i want that connection string once declared used in whole project.
So please help me in declaring connection string once for whole project and that connection string can be accessed on each form of my application.
Thanks
|
|
|
|
|
Put it in app.config file.
|
|
|
|
|
yo can make a class where you declare all database function.Now make a object of this class on each form & pass query only. i use above approach in my application. i use MSAccess as back-end . Class sample as following
<br />
<br />
<br />
using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Data;<br />
using System.Data.OleDb;<br />
<br />
public class mdGlobal<br />
{<br />
string ConnectionString = "Provider=Microsoft.jet.oledb.4.0;data source=" + DatabasePath + " ;Jet OLEDB:Database Password=123";<br />
OleDbConnection con;<br />
OleDbCommand Com;<br />
OleDbDataAdapter da;<br />
<br />
public object ExecuteScaler(string MyQuery)<br />
{<br />
try {<br />
con = new OleDbConnection(ConnectionString);<br />
Com = new OleDbCommand(MyQuery, con);<br />
con.Open();<br />
object result = Com.ExecuteScalar;<br />
con.Close();<br />
return result;<br />
}<br />
catch (Exception ex) {<br />
mdChecking.Prompt(ex.Message.ToString);<br />
if (con.State == ConnectionState.Open) {<br />
con.Close();<br />
}<br />
}<br />
<br />
}<br />
<br />
public void ExecuteQuery(string MyQuery)<br />
{<br />
try {<br />
con = new OleDbConnection(ConnectionString);<br />
Com = new OleDbCommand(MyQuery, con);<br />
con.Open();<br />
Com.ExecuteNonQuery();<br />
con.Close();<br />
}<br />
catch (Exception ex) {<br />
mdChecking.Prompt(ex.Message.ToString);<br />
if (con.State == ConnectionState.Open) {<br />
con.Close();<br />
}<br />
}<br />
<br />
}<br />
<br />
public DataSet GetResultFromQuery(string MyQuery)<br />
{<br />
try {<br />
DataSet ds;<br />
con = new OleDbConnection(ConnectionString);<br />
da = new OleDbDataAdapter(MyQuery, con);<br />
ds = new DataSet();<br />
con.Open();<br />
da.Fill(ds);<br />
con.Close();<br />
return ds;<br />
}<br />
catch (Exception ex) {<br />
mdChecking.Prompt(ex.Message.ToString);<br />
if (con.State == ConnectionState.Open) {<br />
con.Close();<br />
}<br />
}<br />
<br />
}<br />
<br />
public long ReturnSingleValue(string MyQuery)<br />
{<br />
try {<br />
DataSet ds;<br />
long result;<br />
con = new OleDbConnection(ConnectionString);<br />
da = new OleDbDataAdapter(MyQuery, con);<br />
ds = new DataSet();<br />
con.Open();<br />
da.Fill(ds);<br />
if (ds.Tables(0).Rows.Count > 0) {<br />
if (!Information.IsDBNull(ds.Tables(0).Rows(0).Item(0))) {<br />
result = (long)ds.Tables(0).Rows(0).Item(0);<br />
}<br />
else {<br />
result = -1;<br />
}<br />
}<br />
else {<br />
result = -1;<br />
}<br />
con.Close();<br />
return result;<br />
}<br />
catch (Exception ex) {<br />
mdChecking.Prompt(ex.Message.ToString);<br />
if (con.State == ConnectionState.Open) {<br />
con.Close();<br />
}<br />
}<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
chane above code according to you requirement and use it.
hope this helps
Rupesh Kumar Swami
Software Engineer,
Integrated Solution,
Bikaner (India)
My Company
|
|
|
|
|
... or you could pass it as a parameter to any form .ctor
SkyWalker
|
|
|
|
|
yes Mircea Puiu has the right sollution
if u make a new connection every time u want to get data from a database you cause unnecicary overhead and lag when you are opening the window (assuming u make the connection OnFormLoad)
what you sould be doing is making a connection when the program starts up in the Main() method
then when you open a new window u send the instance of the dataBaseConnection to that form
<br />
static class Program<br />
{<br />
[STAThread]<br />
static void Main()<br />
{<br />
Application.EnableVisualStyles();<br />
Application.SetCompatibleTextRenderingDefault(false);<br />
<br />
string ConnString = @"User id = ***; Password = ***; Initial Catalog = ***;<br />
Data Source = ***";<br />
<br />
SqlConnection sqlConn = new SqlConnection(ConnString);<br />
<br />
Application.Run(new FrmMain(userClass, sqlConn));<br />
}<br />
}<br />
now u hav to catch that object in the mainform and you will do this in the constructor of the main form
<br />
public partial class FrmMain : Form<br />
{<br />
SqlConnection sqlConn;<br />
<br />
public FrmMain(SqlConnection sqlCon)<br />
{<br />
InitializeComponent();<br />
sqlConn = sqlCon;<br />
}<br />
}<br />
the reason why i hav declared another SQlConnection object is because of scope, when sqlCon comes in to the FrmMain constructor it is only accessable there. so what we did was create a "blank" sqlConnection and set the one with class wide scope = to the one with only constructor wide scope!
this eliminates the need to make a seperate connection each and every time u need to gat data and it doesnt lag a bit!
hope this helped!
Think big and kick ass
modified on Tuesday, February 12, 2008 4:57 AM
|
|
|
|
|
HarveySaayman wrote: if u make a new connection every time u want to get data from a database you cause unnecicary overhead and lag when you are opening the window (assuming u make the connection OnFormLoad)
what you sould be doing is making a connection when the program starts up in the Main() method
then when you open a new window u send the instance of the dataBaseConnection to that form
Tell me you're joking. Please.
This is the worst thing that you could do. When you do this, you have opened a persistent connection to the database which doesn't get closed until your application exits. This means that your application isn't scalable. More importantly, it doesn't cater for the fact that the database may go down and come back up between calls. If this happens, then your connection is no longer valid.
The general rule is acquire a connection as late as possible and release it as early as possible because a connection is a "precious" resource. If you have pooling enabled, then new connections will merely pull the connection from the pool (dependent on the connection string you pass in).
The correct way to do this (from .NET 2 on) is to put an entry in the ConnectionStrings section in the config file. Then use ConfigurationManager.ConnectionStrings["ConnectionStringNameHere"].ConnectionString to retrieve the actual connection string.
|
|
|
|
|
hi peepZ
after doing some more research on this topic ive stumbled upon something... i use DataAdapters all through my app.
so let me quote a paragraph in "PRO C# 2008 and the .NET 3.5 platform" page 784 Chapter 23 (incase anyone has this book)
"The data adapter object of your data provider handles the database connections automaticly. In an atempt to increase scalability, data adapters keep the connection open for the shortest amount of time posible.
once the caller receives the DataSet object, the calling tier is compleatly disconected from the database and left with a local copy of the remote data. The caller is free to insert, delete or update rows from a given DataTable, but the physical database is not updated until the caller explicitly passes the DataSet to the dataAdapter for updating. in a nutshell, the datasets allow the clients to pretend they are indeed always connected, when infact the are operating on an in memory database"
having read this there is nothing wrong with passing a SqlConnection between forms because i never actualy do SqlConnection.Open() i just pass the closed connection to the dataAdapter which then manages the connections for me
therefore i dont see a problem? i might be wrong, like i said im just a rookie!
i did how ever use the app.Config file to save my connection string but i only use this once in Main().
the problem i hav with making a new connection every time u need data from the db is LAG. its takes a noticeable amount of time to open forms and all the forms in my app query the database before frmWhatEver.Show() is called.
thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
|
|
|
|
|
Are you out of your mind?
Pete is correct. This IS the worst thing you can do. Do you know how expensive an SQL Server connection license is?? Hogging it for the life of your application, which BTW won't do anything with it for about 95% of the time the app is open, is a VERY expensive way to run an app and waste resources on the SQL Server.
|
|
|
|
|
The correct way to do this (from .NET 2 on) is to put an entry in the ConnectionStrings section in the config file. Then use ConfigurationManager.ConnectionStrings["ConnectionStringNameHere"].ConnectionString to retrieve the actual connection string. If you want one entry (and one entry only) then use a static string to store this:
public static class Utility
{
private static string _connString = string.Empty;
public static ConnectionString
{
if (_connString == null)
{
_connString = ConfigurationManager.ConnectionStrings["..."].ConnectionString;
}
return _connString;
}
} It's now available wherever you need it, e.g.
using (SqlConnection conn = new SqlConnection(Utility.ConnectionString))
{
}
|
|
|
|
|
Thanks you
Its works great
Regards
Dikshant Tyagi
|
|
|
|
|
hey!
i guess that why im just a junior?
anywho, i never actualy thaught what would happen if the connection dropped! im such an idiot! but hey, im learning.
ok so i added the app.config file to my project and im using (using System.Configuration; ). but i cant get to ConfigurationManager? why not? or am i just being a no0b again?
oh and why no return type for ConnectionString? im assuming its a method aswell
thanx for showing me the error in my ways!
Think big and kick ass
|
|
|
|
|
Hi Guy
This is very simple. right click in ur main project. and add Application Configuration file.after add with with Configuration tag type like this
<connectionstrings>
After create a stati common class .with in that class
static string conString=ConfigurationManager.ConnectionStrings.
that's all
Use every where in ur project.
see this for more
http://msdn2.microsoft.com/en-us/library/ms254494.aspx[^]
Thanks
Cheers
RRave
MCTS,MCPD
|
|
|
|
|
Hi ALL,
I need to add a hindi font in my set up project(C#) so that client does not need to install that font seprately. So should I add that font in my project. I copied that font in my setup but it simply get copied to the target machine but doesnot get install itself. Please let me know how could I do this so that it get automatically installed in windows font folder.
Thanks a lot
Bajrang Singh
Using .net 2.0 (VS2005)
|
|
|
|
|
hi,
before some time ago , i face this problem. i find the net to resolve this problem and find solution which i decribe below. Note that following code is in vb.net so convert it in c#
first of all add this font to your application for example "ITCKRIST.TTF"
now imports following namespace in module or form level
Imports System.Drawing<br />
Imports System.Text<br />
Imports System.Collections.Generic<br />
Imports System.ComponentModel<br />
now call the following API as following
Private Declare Auto Function AddFontMemResourceEx Lib "Gdi32.dll" _<br />
(ByVal pbFont As IntPtr, ByVal cbFont As Integer, _<br />
ByVal pdv As Integer, ByRef pcFonts As Integer) As IntPtr<br />
now write a function as following
Public Function GetFont(ByVal FontResource() As String) As _<br />
Drawing.Text.PrivateFontCollection<br />
'Get the namespace of the application <br />
Dim NameSpc As String = _<br />
Reflection.Assembly.GetExecutingAssembly().GetName().Name.ToString()<br />
Dim FntStrm As IO.Stream<br />
Dim FntFC As New Drawing.Text.PrivateFontCollection()<br />
Dim i As Integer<br />
For i = 0 To FontResource.GetUpperBound(0)<br />
'Get the resource stream area where the font is located<br />
FntStrm = _<br />
Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream( _<br />
NameSpc + "." + FontResource(i))<br />
'Load the font off the stream into a byte array<br />
Dim ByteStrm(CType(FntStrm.Length, Integer)) As Byte<br />
FntStrm.Read(ByteStrm, 0, Int(CType(FntStrm.Length, Integer)))<br />
'Allocate some memory on the global heap<br />
Dim FntPtr As IntPtr = _<br />
Runtime.InteropServices.Marshal.AllocHGlobal( _<br />
Runtime.InteropServices.Marshal.SizeOf(GetType(Byte)) * _<br />
ByteStrm.Length)<br />
'Copy the byte array holding the font into the allocated memory.<br />
Runtime.InteropServices.Marshal.Copy(ByteStrm, 0, _<br />
FntPtr, ByteStrm.Length)<br />
'Add the font to the PrivateFontCollection<br />
FntFC.AddMemoryFont(FntPtr, ByteStrm.Length)<br />
Dim pcFonts As Int32<br />
pcFonts = 1<br />
AddFontMemResourceEx(FntPtr, ByteStrm.Length, 0, pcFonts)<br />
'Free the memory<br />
Runtime.InteropServices.Marshal.FreeHGlobal(FntPtr)<br />
Next<br />
Return FntFC<br />
End Function<br />
<br />
almost work is done . Now you can change font of any control. for example
dim strFont(0) As String<br />
dim FntFC As New Drawing.Text.PrivateFontCollection()<br />
<br />
strFont(0) = "ITCKRIST.TTF"<br />
FntFC = GetFont(strFont)<br />
<br />
Label1.Font = New Font(FntFC.Families(0), 16)<br />
Label2.Font = New Font(FntFC.Families(0), 16)<br />
hope this helps
Rupesh Kumar Swami
Software Engineer,
Integrated Solution,
Bikaner (India)
My Company
|
|
|
|
|
In the setup program click add special folder and choose Fonts Folder. Add your font to that folder. The font will be automatically installed and uninstalled together with your program
|
|
|
|
|
hi Giorgi,
your solution is better from my solution.
difference is that my solution is work for specific application ,not for all.
thanks
Rupesh Kumar Swami
Software Engineer,
Integrated Solution,
Bikaner (India)
My Company
|
|
|
|
|
Hi
I have classes property and sketch in htis property will be linked to skecth class
and foure different classes which r linked to the skecth class
and two generic list one is for skecth and other is for data of type Object
when i run the program i iam grtting the error here
public Sketch FirstData()
{
// return Datas[Datas.Count];
foreach (Object data in Datas)
{
if (data is Door)
{
Door door = (Door)data;
}
if (data is Fixture)
{
Fixture fixture = (Fixture)data;
}
if (data is Wall)
{
Wall wall = (Wall)data;
}
if (data is Window)
{
Window window = (Window)data;
}
//return
}
return getSketch(1);
}
private Sketch getSketch(Int32 id)
{
foreach (Object data in Datas)
{
if (data is Door)
{
Door door = (Door)data;
door.Id = id;
}
if (data is Fixture)
{
Fixture fixture = (Fixture)data;
fixture.Id = id;
}
if (data is Wall)
{
Wall wall = (Wall)data;
wall.Id = id;
}
if (data is Window)
{
Window window = (Window)data;
window.Id = id;
}
}
return getSketch(id);
}
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
how can i slove this problem?
can any one help me in this
|
|
|
|
|
Hello,
The problem is that you call "getSketch(id)" recursive!
"return getSketch(id);"
You will never come out of this method.
I'm not sure what this program should do, but I have the feeling that the "getSketch" method should somewhere instanciate a "Sketch" object and return this one.
Apart from that you should really work with interfaces, as you have to check four types and write at the same param.
Hope it helps!
All the best,
Martin
|
|
|
|
|
I have created an Int128 class, but am having trouble with my ToString method (converting to base 10). I cannot figure out why I am getting incorrect results. The applicable code is as follows (within a class named "TestUInt"):
private ulong m_LBits, m_HBits;
public TestUInt(ulong high, ulong low) {
m_HBits = high;
m_LBits = low;
}
private static void Divide(TestUInt dividend, TestUInt divisor, out TestUInt quotient, out TestUInt remainder) {
if (divisor == 0ul)
throw new DivideByZeroException();
quotient = 0;
remainder = 0;
if (divisor < dividend) {
remainder = dividend;
} else if (dividend == divisor) {
quotient = 1;
} else if (dividend != 0ul) {
int divBits = Log2(dividend);
int performedOps = 0;
int requiredOps = divBits - Log2(divisor);
for (TestUInt comparator = divisor << requiredOps; divBits >= 64
&& performedOps <= requiredOps; comparator >>= 1, ++performedOps, --divBits) {
quotient <<= 1;
if (dividend >= comparator) {
dividend -= comparator;
quotient.m_LBits |= 1;
}
}
if (performedOps <= requiredOps) {
quotient <<= requiredOps - performedOps + 1;
quotient.m_LBits |= dividend.m_LBits / divisor.m_LBits;
dividend = dividend.m_LBits % divisor.m_LBits;
}
remainder = dividend;
}
}
private static int Log2(TestUInt value) {
if (value.m_HBits != 0)
return MathExtension.Log2(value.m_HBits) + 64;
else
return MathExtension.Log2(value.m_LBits);
}
public static TestUInt operator -(TestUInt a, TestUInt b) {
ulong old_lbits = a.m_LBits;
a.m_LBits -= b.m_LBits;
a.m_HBits -= b.m_HBits;
if (a.m_LBits > old_lbits)
--a.m_HBits;
return a;
}
public static TestUInt operator <<(TestUInt a, int b) {
b &= 127;
if (b == 0) {
return new TestUInt(a.m_HBits, a.m_LBits);
} else if (b >= 64) {
return new TestUInt(a.m_LBits << b - 64, 0);
} else {
return new TestUInt(a.m_HBits << b | a.m_LBits >> 64 - b, a.m_LBits << b);
}
}
public static TestUInt operator >>(TestUInt a, int b) {
b &= 127;
if (b == 0) {
return new TestUInt(a.m_HBits, a.m_LBits);
} else if (b >= 64) {
return new TestUInt(0, a.m_HBits >> b - 64);
} else {
return new TestUInt(a.m_HBits >> b, a.m_HBits << 64 - b | a.m_LBits >> b);
}
}
public static bool operator ==(TestUInt a, TestUInt b) {
return (a.m_LBits == b.m_LBits && a.m_HBits == b.m_HBits);
}
public static bool operator !=(TestUInt a, TestUInt b) {
return (a.m_LBits != b.m_LBits || a.m_HBits != b.m_HBits);
}
public static bool operator <=(TestUInt a, TestUInt b) {
return (a.m_HBits == b.m_HBits ? a.m_LBits <= b.m_LBits : a.m_HBits <= b.m_HBits);
}
public static bool operator >=(TestUInt a, TestUInt b) {
return (a.m_HBits == b.m_HBits ? a.m_LBits >= b.m_LBits : a.m_HBits >= b.m_HBits);
}
public static bool operator <(TestUInt a, TestUInt b) {
return (a.m_HBits == b.m_HBits ? a.m_LBits < b.m_LBits : a.m_HBits < b.m_HBits);
}
public static bool operator >(TestUInt a, TestUInt b) {
return (a.m_HBits == b.m_HBits ? a.m_LBits > b.m_LBits : a.m_HBits > b.m_HBits);
}
public static implicit operator TestUInt(ulong value) {
return new TestUInt(0, value);
}
public override string ToString() {
TestUInt quotient = this, remainder;
string rval = string.Empty;
while (quotient.m_HBits != 0) {
Divide(quotient, 1000000000000000000ul, out quotient, out remainder);
rval = remainder.m_LBits.ToString("D18") + rval;
}
rval = quotient.m_LBits.ToString("D") + rval;
return rval;
} I know that the 'Divide' method is not working (or my theory on how to print integers in base 10 is wrong), because if I change the method "ToString" to use, say 1000 instead of 1000000000000000000, I get a different output. My test application works as follows:
string line = "{0,-3} {1,-3}\r\n {2}\r\n {3}";
UInt128 c = new UInt128(0x4C8A5BB86B074FBD, 0x7A223174473F3F4B);
UInt128 d = new UInt128(0x00000000467471AB, 0x1F2DA3680D768689);
UInt128 e = new UInt128(1, 2);
UInt128 f = 0x1000000000;
UInt128 g = new UInt128(0x11, 0xF000000000000000);
UInt128 h = new UInt128(0x01, 0x1C2A19B300000000);
Console.WriteLine(string.Format(line, "Var", "Frm", "Result", "Computed"));
Console.WriteLine(string.Format(line, "c", "", "101739724956510982573881893874860769099", c.ToString()));
Console.WriteLine(string.Format(line, "d", "", "21804722866621884125668607625", d.ToString()));
Console.WriteLine(string.Format(line, "e", "", "18446744073709551618", e.ToString()));
Console.WriteLine(string.Format(line, "h", "", "20476206912383221760", h.ToString())); Again, sorry for the long post, but hopefully someone is willing to give me some pointers here as to why my ToString method isn't working. Thanks,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Hi Jeff,
I did not study your code in any detail, but have some suggestions.
may I suggest you do all testing and debugging in hex until you are satisfied by
the results. Hex input/ouput will easily reveal where things go wrong when they do.
Also start with small divisors, and keep them a power of 2 or 16 for starters.
With simple hex numbers it should be rather easy to figure out when ToString
fails whether it is due to the Divide method or the ToString logic itself.
I once did a biginteger class (with thousands of uints in one number), but did
the ToString() completely different: rather than executing the expensive
full-divide, I did a much cheaper divide-by-10 for each digit, from right to left.
Also biginteger packages are ideal candidates for NUnit testing, first to check
internal functions such as Log2, then the public methods.
PS: I am unsure about operator precendence in lines such as
return new TestUInt(a.m_HBits << b | a.m_LBits >> 64 - b, a.m_LBits << b);
so I would suggest you add some parentheses to make sure it works correctly.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
I am just using the operator precedence I found here[^], which is basically the following (for my purpose)...
* / % (Multiplicative)
+ - (Additive)
>> << (Shift)
| & ^ (Bitwise) However, it would definitely add readability if I were to include parenthesis, so I will probably fill those in eventually. The thing that interests me most from your post is the more efficient printing algorithm. My current division algorithm takes time O(n^2), where 'n' is the difference between the number of bits in the divisor and the number of bits in the dividend. Therefore, I attempt to minimize both the number of divisions and the time it takes per division by dividing by the largest multiple of 10 <= 2^64. I don't really understand how I could divide by 10 and get faster results, so a brief explanation of how you implement such an algorithm would really be appreciated. Oh, and I did do some arithmetic with both division and moduli, and based on my incorrect results printing the numbers in decimal, I discovered that the following yields errors:
TestUInt foo = new TestUInt(1, 2);
TestUInt quotient = foo / 1000;
TestUInt modulus = foo % 1000; Thanks for the pointers,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Hi Jeff,
Two points to clarify what I said earlier:
1.
for big integers the theory on division algorithms can fill many books; there
are ways much more appropriate than the shift-and-try-to-subtract approach,
especially for *large* numbers. Of course for 128-bit or so, it probably does
not matter much.
2.
I did my ToString() long before I even attempted to do a general divide;
after all, dividing by 10 is a very simple special case, since the divisor
is both small and a known constant. So the easiest approach is by repeated MOD10/DIV10
operations. Your divide-by-a-large-power-of-10, then let .NET take care of
the details, is viable too, of course, provided your division is correct...
Cheers.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|