C# 如何在C语言中从SQL Server获取求和值

C# 如何在C语言中从SQL Server获取求和值,c#,sql-server,C#,Sql Server,我试图用C语言的SQL Server获取我所有的TUTAR列的总和,但做不到。当我尝试上面的代码时,效果很好 string qry = "SELECT * FROM BENZIN WHERE DATE>='" + invoicedate + "' AND DATE<='" + invoicedate1 + "' AND PLATE= '" + plaka + "'"; conn.Open(); SqlDataReader dr = new SqlCommand(qry,conn)

我试图用C语言的SQL Server获取我所有的TUTAR列的总和,但做不到。当我尝试上面的代码时,效果很好

string qry = "SELECT * FROM BENZIN WHERE DATE>='" + invoicedate + "' AND DATE<='" + invoicedate1 + "' AND PLATE= '" + plaka + "'";

conn.Open();

SqlDataReader dr = new SqlCommand(qry,conn).ExecuteReader();

while (dr.Read())
{
    var item = new ListViewItem();
    item.SubItems.Add(dr["TUTAR"].ToString());
    listView1.Items.Add(item);
}    

它什么也不返回。yılcombobox是一个文本框,它包含所选年份,如2017年或2018年或类似年份

当您使用单个值读取SQL结果时,您应该调用方法而不是ExecuteReader,因为它可以避免循环

代码中最可能出现的问题是对datetime列执行LIKE操作,这不会产生任何结果

我想在2017年或选定的年份获得所有sumtutar

一个更大的问题是,您没有参数化您的SQL,这使得它很容易成为您的目标。您应该解决这两个问题:

conn.Open();
using (var cmd = new SqlCommand("SELECT SUM(TUTAR) FROM BENZIN WHERE YEAR(DATE)=@Year", conn)) {
    cmd.Parameters.AddWithValue("Year", int.Parse(yılcombobox.Text));
    var res = cmd.ExecuteScalar();
    if (res != DbNull.Value) {
        yıllıktutar = res.ToString();
    } else {
        yıllıktutar = "<NULL>";
    }
}

你不应该在约会时使用。您应该使用正确的参数,而不是大量使用查询字符串。您是否尝试过在数据库编辑器中执行qry?它是否显示错误?yılcombobox.Text的值是多少?它是否与日期列匹配?您是否尝试直接运行消息框中显示的SQL,如果是,它是否返回任何内容?如果您认为问题出在GetValue0上,那么您可以命名结果,例如,选择SUMTUTAR作为MySum FROM…,然后使用dr[MySum].ToString?我也同意,这不是一种安全的SQL构造方法,因为它易于SQL注入。因此,我如何在不使用LIKE的情况下获取sumtutar。我希望在2017年或选定的年份获取所有sumtutar。我的日期格式为ex:01.07。2017@DjSucuk你可以用BETWEEN来表示日期。有很多方法可以比较日期。
conn.Open();
using (var cmd = new SqlCommand("SELECT SUM(TUTAR) FROM BENZIN WHERE YEAR(DATE)=@Year", conn)) {
    cmd.Parameters.AddWithValue("Year", int.Parse(yılcombobox.Text));
    var res = cmd.ExecuteScalar();
    if (res != DbNull.Value) {
        yıllıktutar = res.ToString();
    } else {
        yıllıktutar = "<NULL>";
    }
}