【问题标题】:problem with getting record by current month按当月获取记录的问题
【发布时间】:2022-01-25 19:36:52
【问题描述】:

我试图在这里获取特定记录,但它总是返回空白

     Try
        cmd = con.CreateCommand()
        cmd.CommandType = CommandType.Text
        cmd.CommandText = "SELECT SUM(a.qty_sold) FROM sales AS a INNER JOIN transaction_history AS c ON c.Id = a.transaction_id WHERE MONTH(c.transaction.date) = MONTH(CURRENT_DATE()) AND YEAR(c.transaction.date) = YEAR(CURRENT_DATE())"
        cmd.ExecuteNonQuery()

        Dim dt As New DataTable()
        Dim da As New SqlDataAdapter(cmd)

        da.Fill(dt)

        Dim dr As SqlClient.SqlDataReader
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)

        While dr.Read
            current_month_products_sold = dr.GetInt32(3).ToString()

        End While


    Catch ex As Exception

    End Try
    MessageBox.Show(current_month_products_sold)

    total_product_sold.Text = current_month_products_sold

我不知道是查询问题还是我提取数据的方式

【问题讨论】:

    标签: vb.net visual-studio


    【解决方案1】:

    不要写空的Catch 块。他们只会吞下错误。

    最好将数据库代码和用户界面代码分开。我创建了一个Function 来执行此操作。

    命令和连接需要调用其Dispose 方法,因为它们使用在Dispose 方法中释放的非托管资源。 Using blocks 为我们处理关闭和处理,即使有错误。

    在使用它们的方法中声明连接,以便可以处理它们。您可以将连接字符串传递给连接的构造函数。同样,将CommandText 字符串和连接传递给命令的构造函数。

    由于我们只检索单个值,我们可以使用ExecuteScalar。这将返回结果集第一行的第一列,始终为Object。因此,CInt。我假设 qty_sold 字段是一个整数字段。

    在尝试代码之前先在 SSMS 中测试您的 Select 语句。 (SQL Server 管理系统)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim current_month_products_sold = ""
        Try
            current_month_products_sold = GetSalesSum().ToString
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Exit Sub
        End Try
        MessageBox.Show(current_month_products_sold)
        total_product_sold.Text = current_month_products_sold
    End Sub
    
    Private Function GetSalesSum() As Integer
        Dim RetVal As Integer
        Dim sql = "SELECT SUM(a.qty_sold) FROM sales AS a INNER JOIN transaction_history AS c ON c.Id = a.transaction_id WHERE MONTH(c.transaction.date) = MONTH(CURRENT_DATE()) AND YEAR(c.transaction.date) = YEAR(CURRENT_DATE())"
        Using cn As New SqlConnection("Your connection string"),
                cmd As New SqlCommand(sql, cn)
            RetVal = CDec(cmd.ExecuteScalar())
        End Using
        Return RetVal
    End Function
    

    【讨论】:

      【解决方案2】:

      似乎有一些代码是从其他东西遗留下来的。由于您只需要一个值,您可以使用ExecuteScalar,如下所示:

      Dim sql = "
          SELECT SUM(a.qty_sold)
          FROM sales AS a
          INNER JOIN transaction_history AS c
          ON c.Id = a.transaction_id
          WHERE MONTH(c.transaction.date) = MONTH(CURRENT_DATE())
          AND YEAR(c.transaction.date) = YEAR(CURRENT_DATE())"
      
      Dim currentMonthProductsSold = 0
      
      Using conn As New SqlConnection("yourConnectionString"),
             cmd As New SqlCommand(sql, conn)
      
          conn.Open()
          currentMonthProductsSold = CInt(cmd.ExecuteScalar())
      
      End Using
      
      MessageBox.Show(currentMonthProductsSold)
      

      【讨论】:

        猜你喜欢
        • 2014-02-12
        • 2021-02-10
        • 2023-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-21
        • 2016-02-25
        相关资源
        最近更新 更多