【发布时间】:2012-07-10 10:58:55
【问题描述】:
当我尝试将 DBNull.Value 插入 nullable varbinary(max) 字段时,出现此异常:
不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。
这是我的代码:
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", SqlDbType.VarBinary).Value = DBNull.Value;
我知道关于 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();
}
}
【问题讨论】:
-
看起来不像正确的代码行。根本没有提到唯一标识符。也许也提供存储过程定义?
-
对不起,我复制了错误的异常。现在已更正。
-
AddWithValue的第二个参数是值。不是数据类型。 -
此错误似乎已在 .NET5+ 中返回。 -1 大小技巧不再有效。有人知道其他解决方案吗?
标签: sql insert dbnull varbinarymax