【问题标题】:Data type mismatch using execute scalar使用执行标量的数据类型不匹配
【发布时间】:2020-05-19 11:53:50
【问题描述】:

我希望使用 Invoice_No 从分配中获取 ALLOCATED_DEPOSIT 的总和。我正在通过 datareader 获取所有详细信息,但 仅执行标量对我来说是个问题。我尝试了所有方法,但使用以下代码总是给出 “数据类型不匹配错误”

connection.Close();

        try
        {
            connection.Open();
            string cstrQuery = "SELECT SUM (ALLOCATED_DEPOSIT)FROM ALLOCATIONS WHERE INVOICE_NO= " + int.Parse(txt_Invoiceno.Text);
            OleDbCommand cmd = new OleDbCommand(cstrQuery, connection);
            int sum = Convert.ToInt32(cmd.ExecuteScalar());
            //long sum = (long)dt.Compute("Sum(ALLOCATED_DEPOSIT)", "True");

            textBox2.Text = sum.ToString();
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
        }
        connection.Close();

【问题讨论】:

  • 您能分享您收到的确切错误消息吗?代码中的哪一行抛出错误?
  • 如果 Invoice_No 是文本类型,请为参数使用撇号分隔符。或者代替参数连接,查看stackoverflow.com/questions/11905185/…
  • @ChetanRanpariya 它说“标准表达式中的数据类型不匹配。”

标签: c# ms-access executescalar


【解决方案1】:

注意ExecuteScalar() 可以返回null

您还将结果用作string,因此无需转换为int,然后再转换为string

改为这样做:

var sumObject = cmd.ExecuteScalar();
if(sumObject != null)
{
    textBox1.Text = sumObject.ToString();
}
else
{
    Console.WriteLine("Something went wrong!");
}

从您的查询推断,我猜ALLOCATED_DEPOSIT 字段中的值是浮点数而不是整数,因此它们的总和将是浮点数。这可能是您看到的“数据类型不匹配错误”。

【讨论】:

  • 我发现 Invoice_no 在 DB 中必须是“int”,而 ALLOCATED_DEPOSIT 必须是“text”。现在可以了。感谢您的帮助。
  • 如果您觉得这个答案有帮助,请随时“接受”这个答案。
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 2013-07-07
  • 2021-08-18
  • 2011-09-11
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多