从数据类型为nvarchar到VARBINARY(最大值)的隐式转换是不允许
问题描述:
我得到这个例外,当我尝试插入DBNull.Value成可空 VARBINARY(最大值)字段:从数据类型为nvarchar到VARBINARY(最大值)的隐式转换是不允许
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
那是我的代码:
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", SqlDbType.VarBinary).Value = DBNull.Value;
我知道这里存在重复的问题,但我不会像其他人一样使用任何字符串。
我该怎么做?
UPDATE:
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();
}
}
答
为什么不改变你的SQL语句:
INSERT INTO TestplanTeststep
(TeststepId,TestplanId,CreatedAt,ErrorText,ErrorScreenshot,TestState)
VALUES
(@TeststepId, @TestplanId,@CreatedAt,NULL,NULL,@TestState)
或只是
INSERT INTO TestplanTeststep
(TeststepId,TestplanId,CreatedAt,TestState)
VALUES
(@TeststepId, @TestplanId,@CreatedAt,@TestState)
...并省略两个参数?
如果它总是NULL,那会有相同的效果。
否则,尝试在两行:
var binary1 = insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary, -1);
binary1.Value = DBNull.Value;
否则,你原来的SQL插入语句,你没有定义的参数类型,但传递VARBINARY,因此错误。
答
我有同样的问题,而插入DBNull.Value
为Varbinary(Max)
列。谷歌搜索后,我找到了一个解决方案,它可以帮助你以及:
您需要设置大小-1这意味着Max
长度varbinary列加入您的SQL参数时:你的情况
this.cmd.Parameters.Add("@Photo", SqlDbType.VarBinary, -1).Value = DBNull.Value;
所以:
insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary,-1).Value = DBNull.Value;
看起来不是正确的代码行。 UniqueIdentifier完全没有提及。也许提供存储过程的定义呢? – Sean 2012-07-10 11:01:35
对不起,我复制了错误的异常。现在更正了。 – Pascal 2012-07-10 11:11:57
“AddWithValue”的第二个参数是值。不是数据类型。 – 2012-07-10 11:17:56