在我的存储过程中,首先执行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()