【问题标题】:There's a problem about using double and im stucked somewhere?使用 double 有问题,我被困在某个地方?
【发布时间】:2018-09-10 19:53:22
【问题描述】:

我想给一个整数加上 0.50,只是我很困惑。我不知道该怎么做。 有代码;

if (checkBox1.Checked)
{
    keko.Open();

    double mesai = Convert.ToDouble(textBox4.Text);
    mesai = mesai + 0.50;
    double maaş = Convert.ToDouble(textBox4.Text);
    maaş += 1;
    textBox4.Text = mesai.ToString() + maaş.ToString();

    MySqlCommand cmd = new MySqlCommand(
      "Update calisanlist Set Gun '" + textBox4.Text + "' where (Adı,Soyadı) '" + textBox1.Text + "','"+textBox2.Text+"'", 
       keko);

    cmd.ExecuteNonQuery();

    keko.Close();

按钮下方有一个复选框。如果我按下按钮而不选中该框,它会自动添加 1 好的,这里没有问题。但是,当我选中该框并按下按钮时,我收到一条错误消息。

MySql.Data.MySqlClient.MySqlException

'你的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 ''7,58' where (Adı,Soyadı) 'Egemen','Ören'' at line 1'。

我不知道如何解决,请帮助我

【问题讨论】:

  • 使用 SQL 语句中的参数和cmd.Parameters.AddWithValue 将它们的值添加到命令中。这不仅可以防止 SQL 注入,还可以避免您遇到的文化敏感格式问题。最后,您的 SQL 似乎有许多语法错误;尝试在 MySQL Workbench 中正确获取语句,然后再将其复制到 C# 代码中。

标签: c# mysql integer double


【解决方案1】:

看来,你可能有问题

   textBox4.Text = mesai.ToString() + maaş.ToString();

想象一下,当 maaş4.1 时,mesai3.5textBox4.Text 中的 3.54.1 不是一个有效 double 值. 你可能是说

   double mesai = Convert.ToDouble(textBox4.Text) + 0.5;
   //TODO: check isn't it a typo? Both mesai and maaş are from the same textBox4.Text
   double maaş = Convert.ToDouble(textBox4.Text) + 1;

   textBox4.Text = (mesai + maaş).ToString();

不要硬编码查询,而是参数化

   ... 

   // Keep sql readable
   // and parameterized
   string sql = 
     @"update calisanlist
          set Gun = @prm_Gun
        where Adı = @prm_Adi and
              Soyadı = @prm_Soyadı";  

   // wrap IDisposable into "using"
   using (MySqlCommand cmd = new MySqlCommand(sql, keko)) {
     // I don't know underlying database types, that's why I've put AddWithValue
     //TODO: change syntax to cmd.Parameters.Add(name, datatype).Value = ...
     cmd.Parameters.AddWithValue("@prm_Gun", Convert.ToDouble(textBox4.Text));
     cmd.Parameters.AddWithValue("@prm_Adi", textBox1.Text);
     cmd.Parameters.AddWithValue("@prm_Soyadı", textBox2.Text); 

     cmd.ExecuteNonQuery();
   } 
   ... 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2023-03-16
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多