记录SqlDataAdapter C#的每条语句
Log each statement of SqlDataAdapter C#
在 C# 中使用 .Update() 方法时,是否可以准确记录 SqlDataAdapter 在 mysql 数据库上执行的每个单独语句?
(无需使用 SQLProfiler 或任何其他第三方程序,而是纯 C# 代码)
你可以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;
}
}
插入、更新或删除的每一行都会触发这些事件。
这是我解决问题的方法,我想我会把它分享给任何寻找想法的人。
#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
在 C# 中使用 .Update() 方法时,是否可以准确记录 SqlDataAdapter 在 mysql 数据库上执行的每个单独语句?
(无需使用 SQLProfiler 或任何其他第三方程序,而是纯 C# 代码)
你可以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;
}
}
插入、更新或删除的每一行都会触发这些事件。
这是我解决问题的方法,我想我会把它分享给任何寻找想法的人。
#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