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
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 ... ).
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
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]));