【问题标题】:Get the int value of a query获取查询的 int 值
【发布时间】:2014-01-12 01:39:30
【问题描述】:

我有以下代码。

string connStr = String.Format("server=localhost;user id=root; password=1234;" + "database=Printermangement; pooling=false", "localhost", "root", "1234");
string Query = "select sum(Page_Printed) from printjobdetails where User_ID = 'MyProperty'GROUP by User_ID";
MySqlConnection conDataBase = new MySqlConnection(connStr);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);

MessageBox.Show(Query);

我想从此查询中获取sum,但我不知道如何获取int 值以显示在消息框中。我怎样才能做到这一点?

【问题讨论】:

  • MessageBox.Show(Query); 显示查询,而不是结果。

标签: c# database winforms int


【解决方案1】:

你可以使用ExecuteScalar方法:

// Prepare the command
string connStr = ...
string Query = "select sum(Page_Printed) from printjobdetails where User_ID = 'MyProperty' GROUP by User_ID";
using(MySqlConnection conDataBase = new MySqlConnection(connStr))
using(MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase))
{
    // Execute the command and get the result
    var sum = (int)cmdDataBase.ExecuteScalar();

    // Display the result
    MessageBox.Show(string.Format("Sum: {0}", sum));
}

我还将您的命令和连接对象放在using 块中。这将确保它们被安全关闭,并且它们使用的任何非托管资源都将得到妥善处理。

【讨论】:

    【解决方案2】:

    此示例来自 Jan Bodnar 的 this blog(非常有帮助),稍作编辑以使用 ExecuteScalar() 方法执行查询。

    using System;
    using MySql.Data.MySqlClient; 
    
    public class Example
    {
    
        static void Main() 
        {
            string cs = @"server=localhost;userid=user12;
                password=34klq*;database=mydb";
    
            MySqlConnection conn = null;
            MySqlDataReader rdr = null;
    
            try 
            {
                conn = new MySqlConnection(cs);
                conn.Open();
    
                string stm = "SELECT * FROM Authors";
                MySqlCommand cmd = new MySqlCommand(stm, conn);
    
                int sum = (int)cmd.ExecuteScalar();
                Console.WriteLine(sum);
    
            } catch (MySqlException ex) 
            {
                Console.WriteLine("Error: {0}",  ex.ToString());
    
            } finally 
            {
    
                if (conn != null) 
                {
                    conn.Close();
                }
    
            }
        }
    }
    

    【讨论】:

    • 为什么是ExecuteReader? OP 只想要一个值; executescalar 是需要的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多