从sql表中计算记录并将其显示在文本框中

时间:2013-10-16 13:51:11

标签: c# sql winforms

我知道这很简单,但我无法思考。显示表中记录的计数并将其显示在文本框中。

private void gMapControl1_Load_1(object sender, EventArgs e)
{
    SqlConnection conDatabase = new SqlConnection(constring);
    conDatabase.Open();
    DataTable db = new DataTable();
    SqlDataAdapter sda = new SqlDataAdapter(
        "select count(site) from [ICPS].[dbo].[excel GPS postcode]",
        conDatabase);

    sda.Fill(db);
    textBox29.Text = ;

    SqlDataAdapter sda = new SqlDataAdapter(
        "select count(site) from [ICPS].[dbo].[excel GPS postcode] "
            + "where Region = '1'",
        conDatabase);

    sda.Fill(db);
    textBox30.Text = ;
}

4 个答案:

答案 0 :(得分:5)

您只需使用SqlCommand.ExecuteScalar代替SqlDataAdapter,就像这样:

SqlCommand com = new SqlCommand("select count(site) from [ICPS].[dbo].[excel GPS postcode]", conDatabase);
object count = com.ExecuteScalar();
if(count != null) textBox29.Text = count.ToString();
//The same for textBox30

有关ExecuteScalar的更多信息 请注意,我发布的代码只是为了使用ExecuteScalar的想法,在使用code style时取决于您的ADO.NET,您可能需要使用一些using语句,或者以您自己喜欢的方式reuse command, ...

答案 1 :(得分:2)

当您希望sql命令返回一个值时,请使用命令对象中的ExecuteScalar

string cmdText1 = "select count(site) from [ICPS].[dbo].[excel GPS postcode]";
using(SqlConnection conDatabase = new SqlConnection(constring))
using(SqlCommand cmd = new SqlCommand(cmdText, conDatabase))
{
      conDatabase.Open();
      int numRec = Convert.ToInt32(cmd.ExecuteScalar());
      textBox29.Text = numRec.ToString();
}

MSDN说

  

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

但是我注意到你试图从两个不同的查询中读取记录数 所以你的代码也可以用这种方式编写,以避免往返数据库

string cmdText = "select count(site) from [ICPS].[dbo].[excel GPS postcode];" + 
                 "select count(site) from [ICPS].[dbo].[excel GPS postcode] " +
                 "where Region = '1'", ;
using(SqlConnection conDatabase = new SqlConnection(constring))
using(SqlCommand cmd = new SqlCommand(cmdText, conDatabase))
{
      conDatabase.Open();
      using(SqlDataReader reader = cmd.ExecuteReader())
      {
          reader.Read();
          int numRec1 = Convert.ToInt32(reader[0]);
          reader.NextResult();
          reader.Read();
          int numRec2 = Convert.ToInt32(reader[0]);
          textBox29.Text = numRec1.ToString();
          textBox30.Text = numRec2.ToString();
      }
}

通过这种方式,我利用了SQL Server执行由分号分隔的两个或多个命令的能力。

答案 2 :(得分:2)

using (SqlConnection conn = new SqlConnection(connString))
{
   conn.Open();
   cmd.CommandText = "select count(site) from [ICPS].[dbo].[excel GPS postcode]";
   Int32 count = (Int32) cmd.ExecuteScalar();
   textBox29.Text = count.ToString();
}

答案 3 :(得分:1)

从datatable中使用row[columnName]

获取值
 SqlDataAdapter sda = new SqlDataAdapter(
    "select count(site) As siteCount  from [ICPS].[dbo].[excel GPS postcode]",
    conDatabase);


sda.Fill(db);
if(db !=null && db.Rows.Count > 0)
textBox29.Text =db["siteCount"].tostring();
else
textBox29.Text ="0";

但是,正如 King King 在此建议的那样,如果您只需要获取单行和单列,请使用数据表。{/ p>

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

ExecuteScalar