2016-07-18 8 views
-1

だから私は、これらのパラメータを持つストアドプロシージャを持っている:SQL Serverのパラメータ化クエリではない設定ビット値

ALTER PROCEDURE [dbo].[usp_insertOrUpdateTimeMilesNote] 
    @id int, 
    @ADID varchar(10), 
    @projectId int, 
    @taskId tinyint, 
    @hours tinyint = 0, 
    @minutes tinyint = 0, 
    @miles smallint = 0, 
    @note varchar(max), 
    @filename varchar(50), 
    @MSVCFlag bit 
AS 

そして、私はそうのようにそれを呼んでいる:ターゲットで

Using db As New SqlCommand("usp_insertOrUpdateTimeMilesNote", New SqlConnection(ConnStr)) 
    db.CommandType = CommandType.StoredProcedure 
    db.Parameters.Add("@id", SqlDbType.Int).Value = 0 
    db.Parameters.Add("@ADID", SqlDbType.VarChar, 10).Value = ADID 
    db.Parameters.Add("@projectId", SqlDbType.Int).Value = ProjectId 
    db.Parameters.Add("@taskId", SqlDbType.Int).Value = 0 
    db.Parameters.Add("@hours", SqlDbType.TinyInt).Value = 0 
    db.Parameters.Add("@minutes", SqlDbType.TinyInt).Value = 0 
    db.Parameters.Add("@miles", SqlDbType.TinyInt).Value = 0 
    db.Parameters.Add("@Note", SqlDbType.VarChar, -1).Value = NoteText 
    db.Parameters.Add("@filename", SqlDbType.VarChar, 50).Value = "" 
    db.Parameters.Add("@MSVCFlag", SqlDbType.Bit).Value = 1 
    db.Connection.Open() 
    db.ExecuteNonQuery() 
    db.Connection.Close() 
End Using 

テーブルの場合、パラメータの値を1に設定しても、MSVCFlagカラムは常に0です。

文字列として使用すると、正常に動作します。

"EXEC usp_insertOrUpdateTimeMilesNote " & id & ",'" & ADID & "'," & projectId & "," & taskId & "," & hours & "," & minutes & "," & miles & ",'" & note & "','" & filename & "'," & MSVCFlag & ";" 

私はこのパラメータを間違っていますか?

編集:投票が大好きです。どうして?

+1

私はそれをTrueに設定し、1 - 'db.Parameters.Add(" @MSVCFlag "、SqlDbType.Bit).Value = True'に設定しないと信じています。 – stuartd

+0

接続文字列はどのようなものですか? 'try {} catch {}'の周りの 'db.ExecuteNonQuery' – MethodMan

+0

以前に値をTrueに設定しようとしましたが、もう一度試しました。挿入後の表にはまだ0が表示されます。私はStackOverflowのどこかでビット値が0か1のいずれかであると読んでいます。 – tolsen64

答えて

0
var objSqlParameter = new SqlParameter 
            { 
             SqlDbType = SqlDbType.Bit, 
             ParameterName = "@MSVCFlag", 
             Value = true 
            }; 

db.Parameters.Add(objSqlParameter) 
+0

これは同じ部屋ではなく、別のドアを使っているのですか? – tolsen64

0

1整数値ではなく、ビット値です。

db.Parameters.Add("@MSVCFlag", SqlDbType.Bit).Value = True 
+0

私はこれを試して、それは動作しません。テーブルにはまだ0が表示されます。 [this](https://msdn.microsoft.com/en-us/library/ms177603.aspx)によると、ビットは1、0、またはNULLの値を取ることができる整数データ型です。 – tolsen64

0

sprocをもっと深く見ないと、私には恥じらいます。 sprocはそのパラメータを使用していないようです。 @id = 0で送信すると、そのMSVCFlag列(新しく挿入された行)には常に0が書き込まれます。 @ id> 0で送信すると、MSVCFlagは既存の行に対して1で更新されます。だから、私はここから恥の散歩をします。

関連する問題