在我的存储过程中,首先执行INSERT查询,然后使用SELECT语句,如下所示:
INSERT ()
SELECT * FROM preferences WHERE ID=@ID
在ADO.NET中,我使用了 - datareader来执行此过程。
但是,它不返回SELECT值,甚至没有执行INSERT statemnt。
任何人都可以告诉我这里有什么问题吗?
CODE:
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手动执行时,过程正在运行文件。
答案 0 :(得分:1)
如果这甚至没有执行插入,那么你需要捕获错误。
try
{
...
}
catch (SqlException ex)
{
Debug.WriteLine(ex.message);
}
finally
{
// close connection
}
select应该在NextResultSet中,但需要先修复插入。
您不会显示DataHelper.GetString
该插入将返回一个整数而不是一个字符串
我不相信你的陈述,没有例外被抛出。
.NET将报告SQL错误
即使该插入影响0行,那么你应该得到0
如果失败那么你应该得到一个例外
如果它在SSMS中插入行但不在.NET中插入(并且不会抛出错误),那么您不会在.NET中执行相同的参数。
DataHelper.GetString(myReader,"学生"))做什么?
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()