我继承了一个包含大量ADO工作的应用程序,但是编写的insert / update辅助方法返回void。我们也遇到了许多实际上没有发生数据更新/插入的问题。我的目标是更新所有这些行以检查受影响的行并根据结果采取相应的行动,但是暂时找到可能导致问题的原因,我想记录针对服务器调用的SQL语句和数字受该声明影响的行数。
这是我正在尝试的声明:
SqlCommand com = new SqlCommand(String.Format("'INSERT INTO
SqlUpdateInsertHistory(Statement, AffectedRows) VALUES (''{0}'', {1});'",
statement.Replace("'", "''"), rows), con);
但它似乎经常在传入的sql中某处(某些情况下是单引号,但我想还有其他字符可能会导致它。
是否有一种安全的方法来准备要插入的语句字符串?
答案 0 :(得分:2)
如果不完全修改你正在做的事情,我就无法正确地提出这个问题的解决方案。您目前对SQL Injection非常开放。即使这是本地应用程序,也可以练习你想玩的方式。
using (SqlCommand com = new SqlCommand("INSERT INTO SqlUpdateInsertHistory(Statement, AffectedRows) VALUES (@Statement, @AffectedRows)", con))
{
com.Parameters.AddWithValue("@Statement", statement);
com.Parameters.AddWithValue("@AffectedRows", rows);
com.ExecuteNonQuery();
}
答案 1 :(得分:0)
您是否尝试过SQL Server Profiler?它已经被编写并记录查询等。
其他人试过这个并获得了很多decent answers here。