我在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。 请问有谁可以告诉我这里有什么问题?
答案 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;
}