SqlCommand 和 SqlDataAapter 的参数

Posted

技术标签:

【中文标题】SqlCommand 和 SqlDataAapter 的参数【英文标题】:Parameters to SqlCommand and SqlDataAtapter 【发布时间】:2016-07-22 22:33:05 【问题描述】:

一直使用 SQLDataAdapter 和 Fill 命令进行数据获取查询,并使用 executenonquery 进行插入、更新、删除查询。

我遇到了问题,无法弄清楚我做错了什么。 我有一个绑定到 RadGrid 的 DataTable。 DataTable 获取公司收据的特定月份的数据,并生成一个包含我们需要的信息的额外列。

我从 RadControl 中得到一个选定的月份,并在按下按钮后发送数据:

    Protected Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
    Dim fecha As Date
    fecha = RadMonthYearPicker1.DbSelectedDate
    miDataTable = objOPRecibo.FacturasEspeciales(fecha.Month, fecha.Year)
    RadGrid1.Rebind()
End Sub

这是被调用对象中的函数:

    Public Function FacturasEspeciales(Mes As Integer, Anio As Integer) As DataTable
    Dim FEDataTable As New DataTable
    Using conection As New SqlConnection(constr)
        Using cmd As New SqlCommand(@"SELECT 
              SUM(Det_Recibo.dCantidad) Cantidad, 
              Producto.Nombre, 
              SUM(Det_Recibo.mTotal) Valor, 
              SUM((((Det_Recibo.mTotal*100)/95)*1.12)) ESPE 
              FROM Det_Recibo 
                   INNER JOIN Enc_Recibo 
                   ON Det_Recibo.idRecibo = Enc_Recibo.idRecibo 
                   INNER JOIN Producto 
                   ON Det_Recibo.idProducto = Producto.IdProducto 
              WHERE MONTH(Enc_Recibo.dFechaFact)=@Mes AND 
                    YEAR(Enc_Recibo.dFechaFact)=@Anio 
                    Producto.idGasto = 1 OR Producto.idGasto = 2 
                    GROUP BY Producto.Nombre")
            cmd.Parameters.AddWithValue("@Mes", Mes)
            cmd.Parameters.AddWithValue("@Anio", Anio)

            Dim sda As New SqlDataAdapter(cmd.CommandText, conection)
            sda.Fill(FEDataTable)

        End Using
    End Using
    'Return DataTable
    Return FEDataTable
End Function

我m 得到@Mes 的未定义标量错误或第二个不特定于 sda.Fill 行的错误。

我是个新手,经过数小时的研究后,我就是不知道我做错了什么。

任何帮助将不胜感激

【问题讨论】:

试试Dim sda As New SqlDataAdapter(cmd) 您在 YEAR 条件之后和 Producto 条件之前缺少 AND/OR 运算符。使用逐字的@字符串可以清楚地说明问题。 感谢史蒂夫回到我的桌面时会检查一下 【参考方案1】:

可能是因为缺少connection.Open()

Using conection As New SqlConnection(constr)
conection.open()
<REST OF YOUR CODE>

【讨论】:

SqlDataAdapter 在连接关闭时打开连接。 史蒂夫谢谢...很高兴知道。 @LarsTech 有更好的答案。

以上是关于SqlCommand 和 SqlDataAapter 的参数的主要内容,如果未能解决你的问题,请参考以下文章

SqlCommand 和 SqlDataAapter 的参数

为IDBCommand和SqlCommand.ExecuteNonQueryAsync实现异步ExecuteNonQuery()

SqlCommand和SqlDataAdapter有什么区别

SqlCommand 超时,CommandTimeout 和 ConnectionTimeout 都 = 0

处理SqlConnection、SqlDataReader、SqlCommand 时要捕获哪些异常?

SqlCommand.Clone() 是创建深拷贝还是浅拷贝?