VB.net数据库编程(06):调用存储过程(带参和不参数情况)

时间:2021-07-21 13:49:37
先建立一个无参的存储过程,为下面第一个无参调用作准备:

[sql] view plaincopyprint?
  1. use Sales  
  2. go  
  3. create procedure sp_getGrade  
  4. as   
  5. select * from grade where 数学>60  
  6. go  

注:go是作为前面批处理的结束情况。因为前面执行是要花时间的,如果后面执行的要依赖前面结果,没有go的话,有可能前面

         没有执行完,当然后面依赖此结果的语句就会执行错误。所以go的作用很大。


再复习ADO.net的过程:

一、连接数据库

二、发出指令。command默认是commandType.text。因为是存储过程,所以应指明为commandType.StoreProcedure

三、填充结果集,显示。


所以代码如下:

[vb] view plaincopyprint?
  1. Imports System.Data.SqlClient  
  2.   
  3. Public Class Form1  
  4.     Dim cn As SqlConnection  
  5.     Dim cm As SqlCommand  
  6.     Dim da As SqlDataAdapter  
  7.     Dim ds As DataSet  
  8.   
  9.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  10.         Try  
  11.             cn = New SqlConnection("Data Source=(local);Initial Catalog=Sales;Integrated Security=false;User ID=sa;Password=123456;")  
  12.             cn.Open()  '此句不省  
  13.             cm = New SqlCommand("sp_getGrade", cn)  
  14.             cm.CommandType = CommandType.StoredProcedure '指明为存储过程  
  15.             da = New SqlDataAdapter(cm)  
  16.             ds = New DataSet()  
  17.             da.Fill(ds, "grade")  
  18.             DataGridView1.DataSource = ds.Tables("grade")  
  19.             cn.Close()  
  20.         Catch ex As Exception  
  21.             MessageBox.Show("执行失败")  
  22.         End Try  
  23.     End Sub  
  24. End Class  

结果如下:

VB.net数据库编程(06):调用存储过程(带参和不参数情况)



================================================================================================


下面是一个带参数的存储过程的调用。

这个带参的存储过程用到了前面的SQL存储过程:

VB.net数据库编程(06):调用存储过程(带参和不参数情况)


注:output是说明这个参数是一个输出变量。有三种变量:输入变量(就是前面两个就是),输出变量(第三个),输入/输出变量。


表中存储的用户名和密码。存储过程就是来验证里面的用户名和密码的。


下面用vb.net来调用这个带参数的存储过程。

带参数的存储过程有一个专门的Parameters属性来指明,其中的Add就是添加这个参数。

另外还有一个Value是获得或设置其变量的值。direction也一样,只不过是特殊的值,比如本的输出参数。


看下实例:带参的存储过程调用

[vb] view plaincopyprint?
  1. Imports System.Data.SqlClient  
  2.   
  3. Public Class Form1  
  4.     Dim cn As SqlConnection  
  5.     Dim cm As SqlCommand  
  6.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
  7.         Try  
  8.             cn = New SqlConnection("Data Source=.;Initial Catalog=Sales;Integrated Security=False;User ID=sa;Password=123456;")  
  9.             cn.Open()  
  10.             cm = New SqlCommand("sp_CheckPass", cn)  
  11.             cm.CommandType = CommandType.StoredProcedure  
  12.             cm.Parameters.Add("@CHKName", SqlDbType.VarChar, 30).Value = TextBox1.Text  
  13.             cm.Parameters.Add("@CHKPass", SqlDbType.VarChar, 30).Value = TextBox2.Text  
  14.             cm.Parameters.Add("@ISValid", SqlDbType.VarChar, 12).Direction = ParameterDirection.Output  
  15.             cm.ExecuteNonQuery()  
  16.             If cm.Parameters("@ISValid").Value = "Good" Then  
  17.                 MessageBox.Show("验证成功")  
  18.             Else  
  19.                 MessageBox.Show("验证失败")  
  20.             End If  
  21.   
  22.         Catch ex As Exception  
  23.             MessageBox.Show(ex.ToString)  
  24.         End Try  
  25.     End Sub  
  26. End Class  

结果:

VB.net数据库编程(06):调用存储过程(带参和不参数情况)


注:这里没用密码框,是为了显示程序流程。