【发布时间】:2016-07-27 04:12:18
【问题描述】:
我正在构造一个sql_insert_string 以在Microsoft.ApplicationBlocks.Data.SqlHelper 中使用,如下所示:
SqlHelper.ExecuteNonQuery(Transaction, CommandType.Text, sql_insert_string)
当我将鼠标悬停在 SQL 语句上时,它如下所示:
string sql_insert_string = "Insert into images_table(image_id, image_byte_array) values ('123', System.Byte[])
其中一个插入值是一个字节数组,如上所示。该变量在字节数组中具有值,例如 byte[6738] 。但是在sql_insert_string 被构造之后,它就变成了System.Byte[]。 image_byte_array 列类型为 varbinary(max)。数据库是 SQL Server 2008。因此数据库会抛出以下错误:
对象或列名丢失或为空。对于 SELECT INTO 语句,验证每一列都有一个名称。对于其他语句,请查找空别名。不允许使用定义为 \"\" 或 [] 的别名。将别名更改为有效名称。
【问题讨论】:
-
您的 sql 字符串生成器只需在
byte[]类型的变量上调用ToString()。显示创建 sql 查询字符串的方法 -
你不应该构造 SQL 语句 - 你应该使用参数来避免 SQL 注入攻击!
-
SqlParameter不仅让你免于 SQL 注入,而且你不会有这样的问题,因为所有输入值都会被正确“转换”为 SqlParameters -
这不是您创建的正确 sql 语句。
标签: c# sql-server