【问题标题】:unable to read from MYSQL无法从 MYSQL 读取
【发布时间】:2016-08-26 01:52:51
【问题描述】:

我想在 Visual Studio 2010 的窗口窗体中显示基于 dateTimePicker 的 P_IN 总数,但是程序无法从 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();

【问题讨论】:

  • "Database.CounterDb" 是你的表名吗?
  • 警告:不要忘记使用prepared statements并避免在查询中插入任意用户数据。 It's not hard to do properly 并避免了很多 ugly side-effects
  • 是的,我的表名

标签: c# mysql visual-studio-2010


【解决方案1】:

这段代码真的很危险, 您不能直接将用户输入添加到查询中 不要使用

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

用户输入可能会破坏查询,日期文本格式可能不正确

使用这个(用你的替换日期格式):

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);

【讨论】:

  • 报错还是一样。还是不能显示P_IN的总数
  • 我用消息框检查过,程序无法读取这部分程序,sdaa.Fill(data, "Database.CounterDb");阅读器 = cmd.ExecuteReader();整数总和 = 0; while (reader.Read()) { sum = reader.GetInt32(1) + sum; } LCounter.Text = sum.ToString();
  • 循环 reader.Read() 找到数据? sum的最终值是多少?
  • 如果我删除 DATE 和 WHERE DATE = '" + dateTimePicker1.Text + 语句,总和将显示数据库中 P_IN 的总和,但现在我想根据 DATE 显示 P_IN 的总和.
  • 好!!!现在..您提交的数据库是日期还是日期时间?如果你有一个日期时间,你需要在一个范围内查询,对于今天 DATE>'2016-05-01' 和 DATE
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2011-10-10
  • 2012-04-10
相关资源
最近更新 更多