Laden...

Parameter von SQL Statement im Klartext in LogFile schreiben

Erstellt von canuck vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.186 Views
C
canuck Themenstarter:in
91 Beiträge seit 2006
vor 17 Jahren
Parameter von SQL Statement im Klartext in LogFile schreiben

Hallo

Ich arbeite gerade an einem XML Import Skript in eine Datenbank (c# Windows Form Applikation).

Nun möchte ich gerne jedes abgesetzte SQL Statement in ein LogFile schreiben.

Funktioniert soweit so gut mit Aufruf der Funktion "writeLog" der ich den Command Text übergebe:


writeLog("command8 > " + odCommand8.CommandText, 1);

Die Commands setze ich alle mit Parametern ab, also wie folgt:


OleDbCommand odCommand8 = new OleDbCommand("INSERT INTO [ARBEITSARTEN] (ARBART, Bezeichnung) VALUES (@arbart, @bezeichnung)", oleDBCon3);

Natürlich erhalte ich nun im LogFile nur den Eintrag mit den Parametern, ich müsste aber im Klartext wissen was in die DB geschrieben wurde..

Hat jemand eine Idee wie ich das lösen kann, ohne auf die Parameter zu verzichten?

Danke für eure Hilfe

S
53 Beiträge seit 2005
vor 17 Jahren

Es gibt mehere Lösungen, entweder du schreibst selber eine Klartext Funktion die du ins LogFile übergibst, oder du machst in der selben Sitzung ein Select mit den Parametern ("INSERT ... ; SELECT ... ).

D
115 Beiträge seit 2006
vor 17 Jahren

Hi,

ich häng mich grad mal an das Thema dran, weil ich ein ähnliches Problem habe.
Ist es auch möglich, im Debugger die eingesetzten Werte zu lesen ?

Gruß Dom

C
11 Beiträge seit 2007
vor 17 Jahren

Hi, wenn ich das Problem falsch verstanden hab, sorry.
Also, was spricht dagegen, dass du durch Parameters-Collection von DbCommand gehst, und ParameterNamen in CommandText durch den Wert ersetzt

ungefähr so (ich schreibe für allgemeine Klasse, mach genau so für Ole)



//also falls du DbCommand direkt ausführst

string CommandText =  MyCommand.CommandText;
foreach (DbParameter Parameter in MyCommand.Parameters)
{
     CommandText = CommandText.Replace(Parameter.ParameterName, ConvertToSqlValue(Parameter.Value));
// hier ConvertToSqlValue eine routine, die verschiedene Werte wie Zahlen, Datum, DBNull usw. als korrekte Sql-Werte darstellt 
}
//hier kannst du CommandText ausgeben.

falls du Insert/Update/Delete Anweisungen von DataAdapter anzeigen willst, wenn du ganze Tabelle speicherst, sollst du
DbDataAdapter.RowUpdating event nutzen, da schreibst du anders
und zwar
CommandText = CommandText.Replace(Parameter.ParameterName, ConvertToSqlValue(e.Row[Parameter.SourceColumn]));