使用SQLite数据库的C#.NET中的查询结果不正确

时间:2015-01-06 15:57:24

标签: c# sql sqlite

我在C#.NET和SQLite数据库中实现了一个应用程序。我需要计算数据库表(水果)的列(状态)的一些值。表格如下。

Id  B   M   status
1   10  101 2
2   11  102 2
3   11  103 0
4   12  104 2
5   13  105 2
6   13  105 2
7   14  106 2
8   14  106 2
9   14  106 2
10  14  106 2

我使用了以下方法从表中提取值并显示输出。

public void CountingValues()
        {    
        string strA, strB, strC;
        double Total;            

        strA = countA();
        strB = countB();
        strC = countC();    

        MessageBox.Show(strA.ToString());
        MessageBox.Show(strB.ToString()); 
        MessageBox.Show(strC.ToString());

}
    public string countA() 
    {
        return GetData("SELECT COUNT(status) FROM fruit WHERE status = 2;");
    }
    public string countB()
    {
        return GetData("SELECT COUNT(status) FROM fruit WHERE status = 1;");
    }
    public string countC()
    {
        return GetData("SELECT COUNT(status) FROM fruit WHERE status = 0;");
    }


    private String GetData(String cmd)
    {
        String result = "";
        SQLiteCommand command = new SQLiteCommand(connection);
        command.CommandText = cmd;
        SQLiteDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            result = reader[0].ToString();                
        }
        reader.Dispose();
        command.Dispose();
        return result;
    }

strA,strB和strC的结果应分别为9,0和1。但是,它显示4,0和6。 请问有谁可以告诉我这里有什么问题?

1 个答案:

答案 0 :(得分:1)

尝试使用select count(*)而不是select count(status)。另外,如果你使用visual studio在" result = reader [0] .ToString()"上设置一个断点。并查看正在填充的值。

任何时候我做数据库调试我检查以确保数据表与我期望从sql查询接收的数据相同。在返回dt上放置一个断点,并确保获得相同的数据表结果,就像在数据库上执行此查询一样。确保将sqlconnection对象更改为您正在使用的类型。

public DataTable GetData()
{
     SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["BarManConnectionString"].ConnectionString);
     conn.Open();
     string query = "SELECT count(*) from fruit where status = 2";
     SqlCommand cmd = new SqlCommand(query, conn);

     DataTable dt = new DataTable();
     dt.Load(cmd.ExecuteReader());
     return dt;
}