如何执行包含INSERT和SELECT语句的存储过程



在我的存储过程中,首先执行INSERT查询,然后执行SELECT语句,如下所示:

        INSERT ()
        SELECT * FROM preferences WHERE ID=@ID

ADO。我使用- 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

谢谢

如果这甚至没有执行插入,那么您需要捕获错误。

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()

相关内容

  • 没有找到相关文章

最新更新