-1

私のストアド プロシージャでは、最初に INSERT クエリを実行してから、次のように SELECT ステートメントを使用します。

        INSERT ()

        SELECT * FROM preferences WHERE ID=@ID

ADO.NET では、datareader を使用してこの手順を実行しました。

ただし、SELECT 値は返されず、INSERT ステートメントも実行されません。

ここで何が間違っているのか教えてもらえますか???

コード:

             strSPROC = "sproc_SaveAndRetrieve"
            Using cmd As New Data.SqlClient.SqlCommand
                cmd.CommandText = strSPROC
                cmd.CommandType = Data.CommandType.StoredProcedure
                cmd.Parameters.Clear()
                cmd.Parameters.AddWithValue("@tvp", CreateDatatableFromCollection(s, isValueOn))
                cmd.Parameters.AddWithValue("@GroupID", syGroupID)

                Using myReader As SqlDataReader = DBManager.GetDataReader(cmd)
                    If myReader.HasRows Then
                        NotFoundRecords= New List(Of String)
                        While myReader.Read()
                            NotFoundRecords.Add(DataHelper.GetString(myReader, "Student"))
                        End While
                    End If

                    Return NotFoundRecords
                    myReader.Close()
                End Using
            End Using

ありがとうございました

プロシージャは、SQL SERVER から手動で実行中にファイルを作業しています。

4

1 に答える 1

1

それが挿入を実行していない場合は、エラーをキャッチする必要があります。

try 
{
    ...
}
catch (SqlException ex) 
{
    Debug.WriteLine(ex.message);
}
finally 
{
    // close connection
}

選択は NextResultSet にある必要がありますが、最初に挿入を修正する必要があります。

DataHelper.GetString を表示しません。
その挿入は、文字列ではなく整数を返します。
例外はスローされないというあなたの声明は信じられません。
.NET は SQL エラーを報告します。
その挿入が 0 行に影響した場合でも、0 を
取得する必要があります。失敗した場合は、例外が発生するはずです。
SSMS に行を挿入しているが、.NET に行を挿入していない (エラーをスローしていない) 場合、.NET で同じパラメーターを実行していません。

DataHelper.GetString(myReader, "Student")) は何をしますか?
NotFoundRecords は単なる文字列のリストです。

これは非常に疑わしい
です 最初のステートメントは int を返すはずです

While myReader.Read()
    NotFoundRecords.Add(DataHelper.GetString(myReader, "Student"))
End While

私はこのようなものを期待します

myReader.Read()
int rowInserted = myReader.GetInt32()
myReader.NextResultSet()
while myReader.Read()
  string sss = myReader.GetString()
End While
myReader.Close()
于 2014-06-24T14:50:38.217 に答える