|
A couple of things:
1) If you paste code fragments, make them as small as possible - no one want to wade through 3 pages of someone else's code for the fun of it.
2) If you paste code fragments, enclose then in <pre>...</pre> blocks with the "Code Block" widget - it preserves the formatting and makes it easier to read. Thus it is more likely that someone will read it. It is the difference between:
{<br />
if (disposing && (components != null))<br />
{<br />
components.Dispose();<br />
}<br />
base.Dispose(disposing);<br />
}
and:
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
(That does not mean just put a code block around your existing post, use the "Preview" button to see what I mean.)
3) Ask a specific question, on where you are stuck, not "how can I make it?". That just shows that you have done no research, to tried in any way to help yourself.
4) Have a little patience, particularly when posting on a weekend. Since today is not a business day in Europe, America or Australia, most people are at home enjoying themselves, rather than hanging around here. Tomorrow, more people will be at work, and may see your question.
5) Trying to push an answer out of people just gets their backs up. No-one here gets paid to do this, so if you annoy them, they will not answer, or will become abusive.
You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
Hi all,
In my application I'd like to write the command that was executed against a SQL database to a log file.
I can't just write the SqlCommand.CommandText property as that might look something like:
"INSERT INTO Users (UserName, Address, PhoneNo) VALUES (@UserName, @Address, @PhoneNo)"
which obviously is of no use to log. The values of the parameters has to be logged as well. I'd prefer not to have to make additional log entries for every parameter so what I've done now is something like this:
string CmdTxt = mySqlCommand.CommandText;
foreach (SqlParameter parm in mySqlCommand.Parameters)
{
CmdTxt = CmdTxt.Replace(parm.ParameterName, "'" + parm.Value.ToString().Replace("'", "''") + "'");
}
And then write CmdTxt to the log.
Does anyone know of a more elegant way of doing this? Is there not perhaps a different member of SqlCommand that I could use?
|
|
|
|
|
Hy,
I've done something quite similar, exept I wrapped it in a Class.
It has some overloads:
Utils.Logs.Write(string message);
Utils.Logs.Write(string message, Exception ex);
Utils.Logs.Write(string message, SqlCommand cmd);
Utils.Logs.Write(string message, Exception ex, SqlCommand cmd);
Utils.Logs.Write(Exception ex, SqlCommand cmd);
Utils.Logs.Write(SqlCommand cmd);
Utils.Logs.Write(Exception ex);
[Edit]Actually it doesn't take a SQLCommand, nor a OleDbCommand as a param, but
a DBCommand wich can be found in System.Data.Common . Both SqlCommand and OleDbCommand
inherit from DbCommand so in order to avoid many oveloades for each type
of Command I used the DbCommand . In my original post I made a mistake and typed
SqlCommand in the params list for the Logs.Write() method. I'll live it like that.
Here's the code without the try...catch...finally for the DbCommand:
public static void Write(System.Data.Common.DbCommand cmd)
{
StreamWriter sw = GetLogFile();
sw.WriteLine("SqlCommand: " + cmd.CommandText);
if ((cmd.Parameters == null) || (cmd.Parameters.Count == 0))
{
sw.WriteLine("Parameters: No Params supplied;");
sw.Flush();
sw.Close();
}
else
{
sw.WriteLine("Parameters:");
foreach (DbParameter pr in cmd.Parameters)
{
sw.WriteLine(String.Format("ParamName: {0} => Value: {1}",
pr.ParameterName, pr.Value.ToString());
}
sw.Flush();
sw.Close();
}
}
[/Edit]
And the method takes the Message, InnerException(if any), StackTrace from the Excpetion,
and the CommandText and Params values from the Command object.
And here's a possible ouput for the overload that takes all three params using Jet Engine for example:
***************START*****************
Date: 27.03.2010::12:30
DeveloperMessage: Error executing the 'procGetStations' query.
SqlCommand:
CommandText: "EXEC procGetStations";
Parameters: No Params supplied;
Exception: The Microsoft Jet database engine cannot find the input table or query 'procGetStations'. Make sure it exists and that its name is spelled correctly.
Sourse: Microsoft JET Database Engine
InnerException: None available
StackTrace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteReader()
at DummyTest.StoredProcedures.StationProcedures.GetStations() in C:\DummyTest\StoredProcedures\Station.cs:line 27
***************END******************
modified on Saturday, March 27, 2010 7:16 AM
|
|
|
|
|
Well, you could base the log entry on what CommandType is specified (stored procedure, text, etc). If it's just text, you could simply save the command text. If it's a storedproc, you would then have to iterate through the parameters. If there's a way to intercept the actual command sent to the dastabase, you could extract the command and log that.
.45 ACP - because shooting twice is just silly ----- "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001
|
|
|
|
|
I just cobble up a string with the commmand text, the parameter names, and their values -- with linefeeds included.
|
|
|
|
|
i am using a compress a file using System.IO.Compress.GZipStream in c# . But i needs compress a folder using is this same class .. how can compress folder . because GZipStream only accept a file Stream
|
|
|
|
|
Well a quick search of MSDN would have shown you exactly the code you need here[^].
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
The OP knows how to use GZipStream to compress a file. What the OP is asking is how to make an archive (or, "compress a folder") out of the compressed files. See the duplicate question just below for other answers relating to this.
|
|
|
|
|
Not quite, both his questions are asking for the procedure to compress a folder rather than a single file. The link I gave hime shows exactly that; the example's description states: "The following example shows how to use the GZipStream class to compress and decompress a directory of files.".
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
A matter of semantics, really. Though I imagine the OP wants all those files to be in the same archive. What the link you provided does is compress each file in a given folder (the output is a bunch of files with ".gz" extensions)... it does not compress the folder (which I take as meaning archive all the files in that folder into a single compressed file, which would likely contain information such as the original names of the uncompressed files).
|
|
|
|
|
You're right, of course. However, I do feel the MSDN sample provided enough information for anyone to create a simple archive of files. The next step would be to implement all the other code required to make it compatible with WinZip, GZip etc.
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Indeed, and that's probably more difficult than it sounds. About a week ago, I took a look at the bytes in a zip archive using no compression and only one 2-byte file and it was confusing. Would probably be best to use a third-party library (which shouldn't be a problem, but people tend to prefer built-in .Net solutions due to their reliability). It's not unreasonable to ask if such a class exists in .Net... it's quite easy to overlook, given its size. In fact, I may have found a class (new to .Net 3.0) that does just what the OP wants (posted below), though I wasn't sure if it was compatible with WinZip (read somewhere it wasn't), so I left it as an exercise for the reader to look into that.
|
|
|
|
|
I did actually respond to this question before I noticed that it was a repost, hence I had not seen your suggestion, which looks like the answer. I may well try it myself.
txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
i am using a compress a file using System.IO.Compress.GZipStream in c# . But i needs compress a folder using is this same class .. how can compress folder . because GZipStream only accept a file Stream
|
|
|
|
|
Delete one of the questions: looks like you've asked it twice.
me, me, me
"The dinosaurs became extinct because they didn't have a space program. And if we become extinct because we don't have a space program, it'll serve us right!"
Larry Niven
|
|
|
|
|
|
anishkannan wrote: GZipStream only accept a file Stream
Actually no, it can take any Stream
Anyway, GZipStream has very week compression and is (as you saw) hard to use. SharpZipLib[^] is much easier to use and compresses a lot better. It supports GZip in addition to Zip(64 and normal) and BZip2, it even supports streams that can not seek.
|
|
|
|
|
Not sure if C# supports Zip archives out of the box. Though you could use XML to easily create your own file format. Not sure if they are compatible with programs like WinZip, but check out System.IO.Packaging.ZipPackage (you must add a reference to WindowsBase.dll to use the Packaging namespace). The bottom of that page also has links to other libraries and such you can use if that doesn't work for you.
|
|
|
|
|
|
should I use event method or to a code for that?
please give me solution.
|
|
|
|
|
You need to write your own code to make a set of check boxes act like a group of radio buttons - probably in the event, as you mentioned.
Me, I'm dishonest. And a dishonest man you can always trust to be dishonest. Honestly. It's the honest ones you want to watch out for...
|
|
|
|
|
|
Why not use RadioButton itself?
|
|
|
|
|
actully i want to copy the XML file into the database table, but in distination table there is an extra column. i want to add a new column and gave it a value.
DataSet ds = new DataSet();
ds.ReadXml("C:\\abc.xml");
DataTable sourceData = new DataTable();
sourceData = ds.Tables[0];
DataColumn UID = new DataColumn();
UID.DataType = System.Type.GetType("System.Int32");
UID.ColumnName = "UID";
sourceData.Columns.Add(UID);
sourceData.Columns["UID"] = 12;
i have done the mapping....
bulkCopy.ColumnMappings.Add("UID", "UID");
.
.
.
.
and in end
bulkCopy.DestinationTableName = "Contact";
bulkCopy.WriteToServer(sourceData);
but UID column always gave the null value in database...
any idea??
|
|
|
|
|
i got it...
i have tried this
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
ds.Tables[0].Rows[i]["UID"] = 12; // or your dates
}
instead of
ds.Tables[0].Columns.Add("UID").defaultValue=12;
Thanks to every one of those who could not help me
|
|
|
|
|
Currently the application I have is single threaded. When the user goes into the form it sends a query to mySQL and starts to populate the UI with data.
The question I have is should I being running this on a separate thread using the invoke methods or is there some other/better way of doing this.
The queries are fairly optimized although they are not stored procs. When we run this in some of our centers that are on VPN this can take alot of time.
Any ideas and or suggestions welcome.
Thank you.
BTW I will be doing this reworking in VS2010 so these would actually be task...
Humble Programmer
|
|
|
|