Pas*_*cal 14 sql dbnull insert varbinarymax
当我尝试将DBNull.Value插入可空的 varbinary(max)字段时,我得到此异常:
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
Run Code Online (Sandbox Code Playgroud)
那是我的代码:
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", SqlDbType.VarBinary).Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我知道在SO上存在重复的问题,但我不像其他人那样使用任何字符串.
我错了什么?
更新:
using (var insertCMD = new SqlCommand("INSERT INTO TestplanTeststep (TeststepId,TestplanId,CreatedAt,ErrorText,ErrorScreenshot,TestState) VALUES (@TeststepId, @TestplanId,@CreatedAt,@ErrorText,@ErrorScreenshot,@TestState)", con))
{
var p1 = insertCMD.Parameters.Add("@TeststepId", SqlDbType.Int);
var p2 = insertCMD.Parameters.Add("@CreatedAt", SqlDbType.DateTime);
insertCMD.Parameters.AddWithValue("@TestplanId", testplan.Id);
insertCMD.Parameters.AddWithValue("@ErrorText", (object) DBNull.Value);
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", (object) DBNull.Value);
insertCMD.Parameters.AddWithValue("@TestState", (int)Teststep.TeststepTestState.Untested);
foreach (Teststep step in teststeps)
{
p1.Value = step.Id;
p2.Value = step.CreatedAt;
insertCMD.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
Pur*_*nce 21
我有同样的问题,而插入DBNull.Value的Varbinary(Max)列.谷歌搜索后,我找到了一个可能对你有帮助的解决方案:
在添加sql参数时,需要设置大小-1,这意味着Maxvarbinary列的长度:
this.cmd.Parameters.Add("@Photo", SqlDbType.VarBinary, -1).Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary,-1).Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
为什么不将SQL更改为:
INSERT INTO TestplanTeststep
(TeststepId,TestplanId,CreatedAt,ErrorText,ErrorScreenshot,TestState)
VALUES
(@TeststepId, @TestplanId,@CreatedAt,NULL,NULL,@TestState)
Run Code Online (Sandbox Code Playgroud)
要不就
INSERT INTO TestplanTeststep
(TeststepId,TestplanId,CreatedAt,TestState)
VALUES
(@TeststepId, @TestplanId,@CreatedAt,@TestState)
Run Code Online (Sandbox Code Playgroud)
...并省略这两个参数?
如果它总是NULL,那将具有相同的效果.
否则,请尝试两行:
var binary1 = insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary, -1);
binary1.Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
否则,在原始SQL插入语句中,您没有定义参数类型,而是传入varbinary,因此错误.