1

true/false に対して 1 または 0 を返す sproc にいくつかのロジックを記述しました。手動で実行するとうまくいきますが、VB から呼び出すと、sproc が返す実際の値に関係なく、常に 0/false になります。おそらく何かばかげたことを見逃していますが、私はそれを見ていません。このコードは、適切に動作するシステム内の他のコードから部分的にコピーされていますが、動的に構築された sproc 呼び出しを使用しています。パラメータ化された sproc 呼び出しを使用するようにそのコードを変更しようとしています。

sproc は、"Allowed" という名前の列に値を返します。

VB コード (変数名/コンテンツ用にコピーおよびサニタイズ) は次のようになります。

Public Function sample(ByVal parm1 As String, ByVal parm2 As String) As Boolean                
    Dim Allowed As Boolean = False
    Try           
        Dim MyConnection As New SqlConnection(ConnString)
        Dim MyDataAdapter As New SqlDataAdapter("sproc", MyConnection)
        Dim DS As New DataSet
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@parm1", SqlDbType.Char, 14))
        MyDataAdapter.SelectCommand.Parameters("@parm1").Value = parm1
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@parm2", SqlDbType.Char, 30))
        MyDataAdapter.SelectCommand.Parameters("@parm2").Value = parm2.ToUpper()
        MyDataAdapter.Fill(DS)
        If DS.Tables.Count > 0 Then
            If DS.Tables(0).Rows.Count > 0 Then
                Allowed = Convert.ToBoolean(DS.Tables(0).Rows(0).Item("Allowed"))
            End If
        End If
    Catch ex As Exception
        ' Real code has error handling here that's not getting hit
    End Try
    Return Allowed
End Function
4

2 に答える 2

2

true/false のみを返す場合は、execute scalar を使用する必要があります。ここに良い例があります

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3

于 2013-01-24T19:10:13.120 に答える
1

sprocで値を次のようなビットとしてキャストするようにします。selectcast(1 as bit)

1を選択し、Cast(1 as bit)を選択すると2つの異なるものになります。

于 2013-01-24T20:14:52.090 に答える