我正在使用C#和.NET 3.5.我需要生成并存储一些T-SQL插入语句,稍后将在远程服务器上执行.
例如,我有一个Employees数组:
new Employee[]
{
new Employee { ID = 5, Name = "Frank Grimes" },
new Employee { ID = 6, Name = "Tim O'Reilly" }
}
Run Code Online (Sandbox Code Playgroud)
我需要最终得到一个字符串数组,如下所示:
"INSERT INTO Employees (id, name) VALUES (5, 'Frank Grimes')",
"INSERT INTO Employees (id, name) VALUES (6, 'Tim O''Reilly')"
Run Code Online (Sandbox Code Playgroud)
我正在看一些使用String.Format创建insert语句的代码,但这感觉不对.我考虑使用SqlCommand(希望做这样的事情),但它没有提供将命令文本与参数组合的方法.
仅仅替换单引号并构建字符串就足够了吗?
string.Format("INSERT INTO Employees (id, name) VALUES ({0}, '{1}')",
employee.ID,
replaceQuotes(employee.Name)
);
Run Code Online (Sandbox Code Playgroud)
这样做时我应该关注什么?源数据相当安全,但我不想做太多假设.
编辑:只是想指出在这种情况下,我没有SqlConnection或任何方式直接连接到SQL Server.这个特定的应用程序需要生成sql语句并将它们排队等待在其他地方执行 - 否则我将使用SqlCommand.Parameters.AddWithValue()
我们有大量依赖动态SQL的SQL Server存储过程.
存储过程的参数用于动态SQL语句中.
我们需要在这些存储过程中使用标准验证函数来验证这些参数并防止SQL注入.
假设我们有这些约束:
我们无法重写不使用动态SQL的过程
我们不能使用sp_OACreate等来使用正则表达式进行验证.
在将参数传递给存储过程之前,我们无法修改调用存储过程的应用程序来验证参数.
是否有一组字符我们可以过滤掉以确保我们不会受到SQL注入的影响?
sql-server validation stored-procedures sql-injection dynamic-sql