嘿所有这是我第一次通过vb.net调用存储过程,我想在执行之前确保一切正确。
这是我的代码:
Dim connectionString As String = GetConnectionString()
Dim intCount As Integer = 0
Using connection As New SqlConnection(connectionString)
Dim command As SqlCommand = connection.CreateCommand()
Try
connection.Open()
command.CommandType = CommandType.StoredProcedure
command.CommandText = "Complete_S_H"
command.Parameters.Add("@J_ID", SqlDbType.Int)
command.Parameters.Add("@O_Nbr", SqlDbType.VarChar)
command.Parameters.Add("@R_Nbr", SqlDbType.VarChar)
command.Parameters("@theOutput").Direction = ParameterDirection.Output
Dim dataReader As SqlDataReader = command.ExecuteReader()
Do While dataReader.Read()
ListView1.Items.Add(Trim(dataReader(0)))
ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(1)))
ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(2)))
ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(3)))
ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(4)))
ListView1.Items(CInt(intCount)).SubItems.Add(Trim(dataReader(5)))
intCount = intCount + 1
Loop
dataReader.Close()
connection.Close()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using
存储过程返回6个列的数据,我想将该数据添加到列表视图中。我不确定我是否有正确的sytax这样做,但这是我在以前的sql代码中使用的(运行查询,而不是存储过程)。
此外,我不确定如何从文本框中获取上述@xxx名称的数据?如何将值从用户文本框传递到@xxx名称?
MS SQL mangement studio代码用于存储过程:
EXEC [dbo].[Complete_S_H]
@J_ID = 208660,
@O_Nbr = NULL,
@R_Nbr = NULL
两个传递的变量可以为NULL。只需填写一个就可以返回数据。
任何帮助都会很棒!
大卫
答案 0 :(得分:3)
你非常接近。
几个笔记:
您可以获得已添加的列表项的本地引用,从而加快并清理代码
除非您知道DB值永远不会为null,否则在使用之前应始终对它们进行DbNull测试。
要使用文本框中的值,您可以使用Parameters.AddWithValue。我已修改代码以显示如何。
另一种方法是在添加参数的.Value属性后设置它:
command.Parameters.Add("@J_ID", SqlDbType.Int).Value = CInt(TextBox1.Text)
或
command.Parameters("@J_ID").Value = CInt(TextBox1.Text)
以下是对这些想法的重写以及设置子项目的奖金循环(不是必需的):
Dim connectionString As String = GetConnectionString()
Using connection As New SqlConnection(connectionString)
Dim command As SqlCommand = connection.CreateCommand()
Try
connection.Open()
command.CommandType = CommandType.StoredProcedure
command.CommandText = "Complete_S_H"
command.Parameters.AddWithValue("@J_ID", CInt(TextBox1.Text))
command.Parameters.AddWithValue("@O_Nbr", TextBox2.Text)
command.Parameters.AddWithValue("@R_Nbr", TextBox3.Text)
command.Parameters("@theOutput").Direction = ParameterDirection.Output
'command.ExecuteNonQuery()
Dim dataReader As SqlDataReader = command.ExecuteReader()
Do While dataReader.Read()
Dim oItem As ListViewItem
oItem = ListView1.Items.Add(Trim(dataReader(0)))
For nI As Integer = 1 To dataReader.FieldCount - 1
If Not dataReader.IsDBNull(nI) Then
oItem.SubItems.Add(Trim(dataReader(nI)))
Else
oItem.SubItems.Add(String.Empty)
End If
Next
Loop
dataReader.Close()
connection.Close()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Using