【问题标题】:C# MySQL table entry counting from user selection [closed]C# MySQL 表条目从用户选择计数[关闭]
【发布时间】:2017-07-16 19:14:55
【问题描述】:

我尝试编写一个代码来计算 MySQL 中的行数,与组合框选择的文本相同。 例如,在我的 MySQL 数据库中,我有一个表(ogrencikayit),在这个表中我有几个列。在我的组合框中有 2 个不同的选项可以选择学生班级。当用户在组合框中选择班级时,标签必须显示所选班级的学生总数。这是我的代码;

DB database = new DB();
        int kayitsayisi = -1;
        MySqlCommand cmd = new MySqlCommand("Select count(*) from ogrencikayit Where ogrsinif ="+comboBox3.Text.ToUpper()+"" , database.baglanti);
        database.baglanti.Open();
        kayitsayisi = Convert.ToInt32(cmd.ExecuteScalar());
        string kayitt = kayitsayisi.ToString();
        label24.Text = kayitt;

很快;我尝试找到一个代码,它将从组合框中读取班级名称的名称,而不是在数据库中搜索有多少学生属于该班级并将其显示在标签上。

【问题讨论】:

  • 那么这里的问题是什么?
  • 问题是代码不起作用。它在 where 子句中显示 Invalid column "class name"。
  • 通过paramerization 创建查询,而不是通过串联。对于初学者,您将避免这样的格式问题。否则,您会向 world of pain 敞开大门,包括 SQL 注入。
  • 您的类型错误我认为...这将解决您的问题并使其更安全msdn.microsoft.com/en-us/library/…

标签: c# mysql


【解决方案1】:

它在 where 子句中显示“类名”列无效。

那是因为你在值周围缺少单引号,因此它将它作为列名。它应该如下所示

Where ogrsinif ='"+comboBox3.Text.ToUpper()+"'"

同样,始终使用参数化查询,而不是连接您的用户输入。

MySqlCommand cmd = new MySqlCommand("Select count(*) from ogrencikayit Where ogrsinif = @ogrsinif" , database.baglanti);
cmd.Parameters.Add("@ogrsinif", SqlDbType.VarChar).Value=comboBox3.Text;

【讨论】:

  • 谢谢你们。现在它正在工作。
  • @A.OZTEPE 已修复。现在就试试。除非您对 MySql 的默认设置做了一些奇怪的事情,否则它将进行不区分大小写的比较,并且无需调用 .ToUpper()
  • 是的@JoelCoehoorn 我删除了.ToUpper。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多