繁体   English   中英

如何在C#.net中获取此计数查询

[英]How To get this Count Query in C#.net

下面的代码开始执行,但该值未在屏幕上打印

 protected void Button1_Click(object sender, EventArgs e)
    {
        if (CheckBox1.Checked)
        {

        string OIMSquery = "SELECT COUNT(name) AS PolicySold FROM TestDate WHERE name='divi'";
        SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
        OIMS_01.Open();
        OIMScmd.ExecuteNonQuery();
        OIMS_01.Close();      

        }       
   }

您应该像这样调用ExectueScaler

int count = (int) OIMScmd.ExecuteScalar();

执行标量

执行查询,并返回查询返回的结果集中第一行的第一列。 其他列或行将被忽略。

使用ExecuteScalar()获取单个值

string OIMSquery = "SELECT COUNT(name) AS PolicySold FROM TestDate WHERE name='divi'";
SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
OIMS_01.Open();
int _result = Convert.ToInt32(OIMScmd.ExecuteScalar());
OIMS_01.Close(); 

您有一个查询。 因此,此调用是不合适的:

OIMScmd.ExecuteNonQuery();

相反,您应该使用ExecuteScalar()

int count = (int) OIMScmd.ExecuteScalar();

(这是可能的,它会返回一个long而不是int -我不知道不加思索)

此外,您应该对SqlCommand使用using语句,并为每个操作创建一个新连接:

using (var connection = new SqlConnection(...))
{
    connection.Open();
    using (var command = new SqlCommand(query, connection))
    {
        int count = (int) command.ExecuteScalar();
        // Now use the count
    }
}

这也不清楚这是什么样的应用程序-如果是在本地GUI(的WinForms或WPF),你应该执行UI线程上的数据库访问。 进行数据库访问时,UI将被冻结。 (如果这是在Web应用程序中,则每次创建一个新的数据库连接就显得尤为重要……您不希望两个单独的请求尝试同时使用同一连接。)

使用SqlCommand.ExecuteScalar()而不是ExecuteNonQuery() ,后者不返回任何内容。

您需要使用: ExecuteScalar()

执行查询,并返回查询返回的结果集中第一行的第一列。 其他列或行将被忽略。

int result = Convert.ToInt32(OIMScmd.ExecuteScalar());

代替

OIMScmd.ExecuteNonQuery();

您可以使用SqlCommand.ExecuteScalar方法;

执行查询,并返回查询返回的结果集中第一行的第一列。 其他列或行将被忽略。

int i = (int)OIMScmd.ExecuteScalar();

由于此方法返回object ,因此应将其隐式转换为int

 using (SqlConnection OIMS_01 = new SqlConnection(connString))
 {
      SqlCommand OIMScmd = new SqlCommand(OIMSquery, OIMS_01);
      try
      {
          OIMS_01.Open();
          int i = (int)OIMScmd.ExecuteScalar();
      }
      catch (Exception ex)
      {
          Console.WriteLine(ex.Message);
      }
 }

尝试, OIMScmd.ExecuteReader(); 方法,该方法返回SqlDataReader类的对象,然后从中读取值。

要么

使用Convert.ToInt32(OIMScmd.ExecuteScalar()) ,然后打印该值。

暂无
暂无

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

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