我正在尝试在数据库中插入字节数组的字节。使用以下代码。
String query = String.Format(@"INSERT INTO [Documents]
([InsertedBy], [DocumentName], [Document])
VALUES
('{0}','{1}',{2})",
insertedBy, docName, docBytes);
Cmd.CommandText = query;
Cmd.ExecuteNonQuery();
发生以下异常:
对象或列名称缺失或为空。对于SELECT INTO 声明,验证每列是否有名称。对于其他陈述,请查看 对于空别名。不允许使用定义为“”或[]的别名。 将别名更改为有效名称。 ''。
附近的语法不正确
我不知道原因是什么。
答案 0 :(得分:1)
永远不要使用字符串连接或字符串函数来进行参数化查询。
另外,因为(我怀疑)docBytes
是byte[]
,字符串连接将不会有您希望的结果。
我将如何做到这一点:
private static void InsertDocument(SqlCommand cmd, int insertedBy, string docName, byte[] docBytes)
{
cmd.CommandText = @"INSERT INTO [Documents]
([InsertedBy], [DocumentName], [Document])
VALUES
(@insertedBy,@docName,@docBytes)";
cmd.Parameters.Add("insertedBy", SqlDbType.Int).Value = insertedBy;
// Note: consider using `nvarchar` instead of `varchar`;
cmd.Parameters.Add("docName", SqlDbType.VarChar, 100).Value = docName;
// Note: -1 maps to the nvarchar(max) length;
cmd.Parameters.Add("docBytes", SqlDbType.VarBinary, -1).Value = docBytes;
// The following call presupposes that the associated `SqlConnection` is open
cmd.ExecuteNonQuery();
}
答案 1 :(得分:0)
如果您的insertedBy
列是int
,则无需使用单引号。因为您尝试在int
类型列中插入字符。
就像使用它一样;
string query = String.Format(@"INSERT INTO [Documents]
([InsertedBy], [DocumentName], [Document])
VALUES
({0},'{1}',{2})",
insertedBy, docName, docBytes);
但由于我们不知道你的价值观,这是我唯一的建议。