-1

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

        INSERT ()

        SELECT * FROM preferences WHERE ID=@ID

在 ADO.NET 中,我使用了 -datareader 来执行此过程。

但是,它不返回 SELECT 值,甚至不执行 INSERT statemnt。

任何人都可以建议我这里有什么问题吗???

代码:

             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 回答