17

DBNull.Valueをnull許容の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();
        }
     }
4

2 に答える 2

23

カラムの挿入時に同じ問題が発生しDBNull.Valueました。Varbinary(Max)グーグルした後、私はあなたにも役立つかもしれない解決策を見つけました:

サイズ-1を設定する必要があります。これはMax、SQLパラメータを追加するときにvarbinary列の長さを意味します。

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

だからあなたの場合:

insertCMD.Parameters.Add("@ErrorScreenshot", SqlDbType.VarBinary,-1).Value = DBNull.Value;
于 2013-02-06T05:20:39.517 に答える
8

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)

...そして2つのパラメータを省略しますか?

常にNULLの場合、同じ効果があります。

それ以外の場合は、2行で試してください。

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

それ以外の場合、元のSQL挿入ステートメントでは、パラメータータイプを定義するのではなく、varbinaryを渡すため、エラーが発生します。

于 2012-07-10T11:24:06.830 に答える