sql-server - 向存储过程发送参数 vb.net

标签 sql-server vb.net vb.net-2010

你好,这是我在 vb.net 中使用 MS visual studio 2010 的第一个项目,我想创建一个可以将参数发送到 transact-sql 数据库中的存储过程的类,我知道如何在 vb 6 中执行此操作,但我我不确定在这里这样做是否正确。

Imports System.Data.SqlClient

Public Class ClsLineas

Public Sub Inserta(ByVal GridLineas As DataGrid, _
                   ByVal numero As String, _
                   ByVal tipo As String, _
                   ByVal estado As String, _
                   ByVal anexo As Integer, _
                   ByVal fechaInicio As String, _
                   ByVal fechaFin As String, _
                   ByVal pcReg As String, _
                   ByVal observaciones As String, _
                   ByVal usuReg As String)

    Dim cnx As SqlConnection = New SqlConnection(ClsCon.connectionString)
    'ClsCon.connectionString is a class that contains the connection string 
    Dim cmd As SqlCommand = New SqlCommand()

    If cnx.State = ConnectionState.Closed Then cnx.Open()

    cmd.Connection = cnx
    cmd.CommandText = "SP_INSERTA_LINEA"
    cmd.CommandType = CommandType.StoredProcedure

    Dim prm As New SqlParameter

    prm.ParameterName = "@TIPO"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 30
    prm.Direction = ParameterDirection.Input
    prm.Value = tipo
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@FECHA_INICIO"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 30
    prm.Direction = ParameterDirection.Input
    prm.Value = fechaInicio
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@FECHA_FIN"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 30
    prm.Direction = ParameterDirection.Input
    prm.Value = fechaFin
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@ESTADO"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 30
    prm.Direction = ParameterDirection.Input
    prm.Value = estado
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@NUMERO"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 15
    prm.Direction = ParameterDirection.Input
    prm.Value = numero
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@ANEXO"
    prm.SqlDbType = SqlDbType.Int
    prm.Direction = ParameterDirection.Input
    prm.Value = anexo
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@PC_REG"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 50
    prm.Direction = ParameterDirection.Input
    prm.Value = pcReg
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@USU_REG"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 50
    prm.Direction = ParameterDirection.Input
    prm.Value = usuReg
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@OBSERVACIONES"
    prm.SqlDbType = SqlDbType.NVarChar
    prm.Size = 1000
    prm.Direction = ParameterDirection.Input
    prm.Value = observaciones
    cmd.Parameters.Add(prm)

    prm.ParameterName = "@ID"
    prm.SqlDbType = SqlDbType.Int
    prm.Direction = ParameterDirection.Output
    cmd.Parameters.Add(prm)

    Dim adp As SqlDataAdapter = New SqlDataAdapter(cmd)

    Dim DataSet As DataSet = New DataSet("Lineas")

    adp.Fill(DataSet)
    GridLineas.DataSource = DataSet.Tables(0)

End Sub
End class

我的一些疑问是:

我真的需要在每次调用类的方法时都打开数据库吗?

sqlAdapter 和 Dataset 真的需要吗?在 vb 6 中,您可以在附加参数后执行类似“命令执行插入”的操作,然后就完成了。

最佳答案

如果您只是读取数据,请查看 SqlDataReader:

Dim reader As SqlDataReader
reader = cmd.ExecuteReader()
While reader.Read
    //Do stuff with reader
End While

如果您正在进行更新或插入,那么您可以使用 SqlCommand 类的 ExecuteNonQuery() 方法。

SqlCommand有一个加参数的简写:

cmd.Parameters.AddWithValue("@MyParamName", myParamValue)

您可能会觉得有用。

是的,您应该在每次需要与数据库交互时打开和关闭数据库连接。阅读 Using 语句,这将帮助您巧妙而巧妙地完成这项工作。

关于sql-server - 向存储过程发送参数 vb.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014044/

相关文章:

java.sql.SQLException 无效的对象名称

sql-server - 文件的目录查找失败,出现操作系统错误 5(访问被拒绝。)

mysql - 如何从表中选择不在select查询结果中的记录(select查询可能是2个或更多表的连接)

Python - for 循环内的 if 和 else 且 count 不起作用

mysql - 运算符在 vb.net 中用于组合框

asp.net - 使用 iTextSharp 生成 QR 条形码

sql - Select Join 在不同数据库中是否存在性能问题?

.net - 有没有办法从 TableLayoutPanel 的一行中删除所有控件?

vb.net - 删除 VB.Net 中的 "Invisible"控制字符

vb.net - 如何检查应用程序是否以管理员身份运行 VB.NET