1

以下のコードを実行して、vb.net を使用して infopath フォームから SQL プロシージャを呼び出しようとしています。

これらの問題をできるだけ早く修正するのを手伝ってください

ありがとう

Try
         Dim con As New SqlConnection("Data Source= XXXX;Initial Catalog= XXXXX;Integrated Security=true")
         Dim cmd As New SqlCommand
         Dim dr As SqlDataReader
         con.Open()
         cmd.CommandType = Data.CommandType.StoredProcedure
         cmd.CommandText = "Procedure Name"
         cmd.Parameters.Add(New SqlParameter("@Name", SqlDbType.VarChar, 50)).Value = "XXX" 
         cmd.Parameters.Add(New SqlParameter("@CustID", SqlDbType.VarChar, 20)).Value = "XXX"  
         cmd.Connection = con
         dr = cmd.Executereader()
         dr.Read()
         If dr.HasRows Then
             MessageBox.Show(dr.GetString(0))
         End If
                con.Close()
Catch ex As Exception
         MessageBox.Show(ex.Message)
End Try

私のSQL手順:

enter code here

Create procedure Test_Infopath

@Name varchar(50),
@CustID Varchar(20)
      AS 

      Declare @Condition INT
      SELECT @Condition = CustID FROM temp_infopath WHERE CustID = @CustID
      IF @CustID= @Condition
      BEGIN 
                Print 'Customer ID already Exists'
      END
      Else 
                Print 'Submit the form to insert the data'
4

1 に答える 1

0

したがって、レコードではなく、ストアド プロシージャでメッセージを返す必要があります。
ただし、ADO.NET の SqlDataReader およびその他のメソッドは、メッセージ文字列ではなくレコードを返すと考えられています。
このように手順を変更することをお勧めします

ALTER PROCEDURE Test_Infopath
    @Name varchar(50),
    @CustID Varchar(20)
    AS 

    Declare @Condition INT
    SELECT @Condition = CustID FROM temp_infopath WHERE CustID = @CustID

    IF @CustID= @Condition
        SELECT 'Customer ID already Exists'
    Else 
        SELECT 'Submit the form to insert the data'

これで、SqlDataReader はメッセージを SELECT によって返されたレコードとして認識します。
ところで、単一の行で構成される単一のレコードを返す場合、このシナリオをコーディングする通常の方法は、別のオブジェクト インスタンスを使用せずに、SqlCommand の ExecuteScalar メソッドを使用することです。 SqlDataReader のように。

cmd.Connection = con
Dim message = cmd.ExecuteScalar().ToString()
MessageBox.Show(message)
于 2013-04-25T08:52:04.443 に答える