2016-05-01 72 views
0

我想在Visual Studio 2010的窗口窗體中顯示基於dateTimePicker的P_IN總數,但是在程序無法從MySQL.Below讀取數據時出現錯誤。無法從MYSQL中讀取

cmd = new MySqlCommand("SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = '" + dateTimePicker1.Text + "'", con); 
         MySqlDataAdapter sdaa = new MySqlDataAdapter(cmd); 
         DataSet dataa = new DataSet(); 
         sdaa.Fill(dataa, "Database.CounterDb"); 
         reader = cmd.ExecuteReader(); 
         int sum = 0; 
         while (reader.Read()) 
         { 

          sum = reader.GetInt32(1) + sum; 

          } 
          LCounter.Text = sum.ToString(); 
+0

「Database.CounterDb」是你的表名嗎? – CapeStar

+2

**警告**:不要忘記使用**準備好的語句**,並避免在查詢中插入任意用戶數據。 [這不難做到](http://bobby-tables.com/csharp.html),並避免了很多[醜陋的副作用](http://bobby-tables.com/)。 – tadman

+0

是的,那我的表名 –

回答

0

這個代碼是非常危險的, 你一定不要直接將用戶輸入添加到查詢 不使用

cmd = new MySqlCommand("SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = '" + dateTimePicker1.Text + "'", con); 

用戶輸入可能打破了查詢,日期文本格式不能在正確的格式

使用這個(更換日期格式YOURS):

DateTime dt = DateTime.ParseExact(dateTimePicker1.Text, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = "SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE = @dt"; 
    cmd.Prepare(); 
    cmd.Parameters.AddWithValue("@dt", dt); 

否則,如果您需要在範圍內搜索例如2016-02-20 00:00:00 - 2016-02-20 23:59:59,您必須查詢此日期的所有條目:

DateTime dt = DateTime.ParseExact(dateTimePicker1.Text, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture).Date; 
DateTime dt1 = dt.AddDays(1); 
cmd.CommandText = "SELECT DATE, P_IN FROM Database.CounterDb WHERE DATE > @dt and DATE <@dt1"; 
cmd.Prepare(); 
cmd.Parameters.AddWithValue("@dt", dt); 
cmd.Parameters.AddWithValue("@dt1", dt1); 
+0

錯誤仍然是一樣的。仍然無法顯示總數P_IN –

+0

我已經使用消息框檢查過,程序無法讀取這部分程序,, sdaa.Fill(data,「Database.CounterDb」); reader = cmd.ExecuteReader(); int sum = 0; while(reader.Read()) sum = reader.GetInt32(1)+ sum; } LCounter.Text = sum.ToString(); –

+0

循環reader.Read()發現數據?總和的最終值是多少? –