是否有可能精確地記錄SqlDataAdapter在mysql數據庫上執行的每個語句,而在C#中使用.Update()方法?記錄SqlDataAdapter的每個語句C#
(無需使用SQLProfiler或任何其他第三方PROGRAMM,但純粹的C#代碼)
是否有可能精確地記錄SqlDataAdapter在mysql數據庫上執行的每個語句,而在C#中使用.Update()方法?記錄SqlDataAdapter的每個語句C#
(無需使用SQLProfiler或任何其他第三方PROGRAMM,但純粹的C#代碼)
這是我解決我的問題的方式,我以爲我會分享給任何尋找想法的人。
#region generate SQL Update Script
static void da_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
{
string sqlCommand = e.Command.CommandText;
for (int i = 0; i < sqlCommand.Length; i++)
{
string substring = "";
string paramvalue = "";
int check = 0;
int index = 0;
substring = sqlCommand.Substring(i, 1);
if (substring == "@")
{
if (Int32.TryParse(sqlCommand.Substring(i + 3, 1), out check))
{
index = Convert.ToInt32(sqlCommand.Substring(i + 2, 2));
paramvalue = e.Command.Parameters[Convert.ToInt32(sqlCommand.Substring(i + 2, 2)) - 1].Value.ToString();
sqlCommand = sqlCommand.Remove(i, 4);
}
else
{
index = Convert.ToInt32(sqlCommand.Substring(i + 2, 1));
paramvalue = e.Command.Parameters[index - 1].Value.ToString();
sqlCommand = sqlCommand.Remove(i, 3);
}
sqlCommand = sqlCommand.Insert(i, paramvalue);
}
}
sw.WriteLine(sqlCommand);
sw.Flush();
}
#endregion generate SQL Update Script
,你可以像handle the DataAdapter
events或RowUpdating
RowUpdated
。
因此,對於你MySql
數據庫:
void OnRowUpdated(object sender, MySqlRowUpdatedEventArgs args)
{
string sql = args.Command.CommandText;
bool isStoredProcedure = args.Command.CommandType == CommandType.StoredProcedure;
foreach (MySql.Data.MySqlClient.MySqlParameter p in args.Command.Parameters)
{
string paramName = p.ParameterName;
DbType dbType = p.DbType;
MySqlDbType dbType2 = p.MySqlDbType;
object value = p.Value;
}
}
這些事件被觸發爲每一個被插入,更新或刪除的行。
_「記錄完全每個單獨的陳述」_什麼樣的陳述? – 2015-03-31 12:01:57
@Tim Schmelter帶有所有參數的INSERT,DELETE和UPDATE語句 – hYde 2015-03-31 12:03:57
您想在哪裏登錄?文件系統?數據庫中的審計表?如果後者你可以隨時添加一個觸發器到你的表。 – BDH 2015-03-31 12:14:58