嘿所有我试图找到从没有发送参数的存储过程中获取数据的示例,也没有任何返回的输出参数。虽然它确实显示数据。
我如何从我的代码中使用以下内容获取该内容?
Dim myCommandSQL As New SqlCommand
Dim myReaderSQL As SqlDataReader = Nothing
Dim intX As Integer = 0
Dim connSql As SqlConnection
Try
connSql = New SqlConnection("Server=sqlprod;" & _
"Database=ISS3_PROD;" & _
"User ID=xxx;" & _
"Password=xxx;" & _
"Trusted_Connection=False;")
connSql.Open()
myCommandSQL.CommandType = CommandType.StoredProcedure
myCommandSQL.CommandText = "Select_Prod"
Dim sqlParReturn1 As System.Data.SqlClient.SqlParameter = myCommandSQL.Parameters.Add("@return_value", SqlDbType.VarChar)
sqlParReturn1.Direction = ParameterDirection.Output
myCommandSQL.ExecuteNonQuery()
MsgBox(sqlParReturn1)
connSql.Close()
myCommandSQL.Dispose()
@return_value我只是放在那里看看会发生什么,但我没有得到任何回报。
任何帮助都会很棒!
大卫
答案 0 :(得分:3)
如果为命令分配参数,则存储过程应采用参数。此外,如果您将方向指定为Output
,则应在存储过程中将该参数标记为OUTPUT
。
如果您只想获取不带任何参数的存储过程的结果,请删除包含sqlParReturn1
的所有行。此外,您的命令不是“非查询” - 您 查询数据。为了得到它,你应该这样做(我还使用一些更好的练习技术重构你的代码):
Using connSql As SqlConnection = New SqlConnection(...)
connSql.Open()
Using myCommandSQL As SqlCommand = connSql.CreateCommand()
myCommandSQL.CommandType = CommandType.StoredProcedure
myCommandSQL.CommandText = "Select_Prod"
Using reader As SqlDataReader = myCommandSQL.ExecuteReader()
If reader.HasRows Then
While reader.Read()
// loops through the rows returned
End While
End If
End Using
End Using
End Using
答案 1 :(得分:2)
以下是使用ADO datareader读取数据的MSDN documentation。我认为他们的例子很好地解释了这一点,所以我只是复制并粘贴了这里的例子。只需替换您的SQL设置,然后您只需要调用ExecuteReader
,然后在reader.Read
找到行时运行while循环。在循环内部,您可以使用序号或列名通过reader.Get...
访问您的列。
Private Sub HasRows(ByVal connection As SqlConnection)
Using connection
Dim command As SqlCommand = New SqlCommand( _
"SELECT CategoryID, CategoryName FROM Categories;", _
connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Console.WriteLine(reader.GetInt32(0) _
& vbTab & reader.GetString(1))
Loop
Else
Console.WriteLine("No rows found.")
End If
reader.Close()
End Using
End Sub