繁体   English   中英

使用float(C#)汇总sql列

[英]Sum sql columns using float(C#)

我正在使用此代码:

SqlConnection con = new SqlConnection(@"Data Source=(local);Initial     
Catalog=dbsoft;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT SUM(price) FROM fiscal");
cmd.Connection = con;
int sum = cmd.ExecuteScalar();
label3.Text = sum.ToString();
con.Close();

我收到此错误消息:

无法将类型'object'隐式转换为'int'。 存在显式转换(您是否错过了演员?)

我错过了什么?

SqlCommand.ExecuteScalar返回一个对象,您必须将其转换/转换为您需要的类型。 如果您希望您的SUM在DB中的类型为float ,则使用double因为SQL Server服务器中的float 在C#中double 喜欢:

double sum = (double) cmd.ExecuteScalar();

还要考虑using语句SqlConnectionSqlCommand对象SqlCommand起来,这样可以确保资源处理,即使出现异常也是如此。

价格在总结像12.3456.78等。我们可以指望得到浮点值 钱的情况下, Decimal是一个典型的选择(而不是int ):

  ...
  // Convert.ToDecimal - let .Net convert, not just cast;
  // what if, say, String has been returned?
  Decimal sum = Convert.ToDecimal(cmd.ExecuteScalar()); // Decimal sum

  label3.Text = sum.ToString();

执行:

String connString = @"Data Source=(local);Initial     
Catalog=dbsoft;Integrated Security=True";

// Wrap IDisposable into using
using (SqlConnection con = new SqlConnection(connString)) {
  con.Open();

  // Wrap IDisposable into using
  using (SqlCommand cmd = new SqlCommand(
    @"SELECT SUM(price) 
        FROM fiscal")) {

    cmd.Connection = con;

    Decimal sum = Convert.ToDecimal(cmd.ExecuteScalar()); // Decimal sum

    label3.Text = sum.ToString(); 

    // or
    // Shortcut - you have no need in additional convert/cast 
    //label3.Text = Convert.ToString(cmd.ExecuteScalar());
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM