簡體   English   中英

不允許從數據類型 nvarchar 到 varbinary(max) 的隱式轉換

[英]Implicit conversion from data type nvarchar to varbinary(max) is not allowed

當我嘗試將 DBNull.Value 插入可為的 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();
        }
     }

在為Varbinary(Max)列插入DBNull.Value時,我遇到了同樣的問題。 谷歌搜索后,我找到了一個可能對您也有幫助的解決方案:

您需要設置大小-1 ,這意味着添加 sql 參數時 varbinary 列的Max長度:

this.cmd.Parameters.Add("@Photo", SqlDbType.VarBinary, -1).Value = DBNull.Value;

所以在你的情況下:

insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary,-1).Value = DBNull.Value;

為什么不將您的 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,因此會出現錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM