c# - 我不断收到输入字符串的格式不正确的信息

标签 c# mysql wpf

我认为我写的所有内容都是正确的...但我不断收到此错误,说输入字符串的格式不正确

所以首先我从用户那里获取值,然后转换为 int 然后计算然后将其返回到字符串

private void btnenroll_Click(object sender, RoutedEventArgs e)
{
   string things;
   string morethings;
   try
   {
      id = Convert.ToInt32(txtempty.Text) + 1;
      con.Open();

      things = "INSERT INTO vikoba.members(id_no , names_) VALUES (@id) , (@name)";
      cmd = new MySqlCommand(things, con);

      cmd.Parameters.Add(new MySqlParameter( "@id", MySqlDbType.Int32,4));
      cmd.Parameters["@id"].Value = id.ToString();
      cmd.Parameters.Add(new MySqlParameter("@name", MySqlDbType.VarChar,20));
      cmd.Parameters["@name"].Value = txtname.Text;

      cmd.ExecuteNonQuery();

      morethings = "INSERT INTO vikoba.mpoko(id_no , jumpla_mpoko , mkopo , riba , bima) VALUES  (@id) , (@jumla) , (@mkop) , (@riba) ,(@bima) ";
      cmd = new MySqlCommand(morethings, con);
      cmd.Parameters.Add(new MySqlParameter("@id", MySqlDbType.Int32));
      cmd.Parameters["@id"].Value = id.ToString();
      cmd.Parameters.Add(new MySqlParameter ("@jumla", MySqlDbType.Int32));
      cmd.Parameters["@jumla"].Value = txtjumla.Text;
      cmd.Parameters.Add(new MySqlParameter("@mkop",MySqlDbType.Int32));
      cmd.Parameters["@mkop"].Value = txtloan.Text;
      cmd.Parameters.Add(new MySqlParameter ("@riba", MySqlDbType.Int32));
      cmd.Parameters["@riba"].Value = txtriba.Text;
      cmd.Parameters.Add(new MySqlParameter("@bima", MySqlDbType.Int32));
      cmd.Parameters["@bima"].Value = txtbima.Text;
      cmd.ExecuteNonQuery();

      con.Close();   
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message.ToString());
   }
}

最佳答案

您的 SQL 查询语法错误

things = "INSERT INTO vikoba.members(id_no , names_) VALUES (@id, @name)";
cmd = new MySqlCommand(things, con);
cmd.Parameters.Add(new MySqlParameter( "@id", MySqlDbType.Int32,4));
cmd.Parameters["@id"].Value = id;
cmd.Parameters.Add(new MySqlParameter("@name", MySqlDbType.VarChar,20));
cmd.Parameters["@name"].Value = txtname.Text;
cmd.ExecuteNonQuery();

删除了VALUES(@ID), (@name),并且在将 id 变量作为参数值传递时不要尝试将其转换为字符串。第二个查询中发生同样的事情

 morethings = "INSERT INTO vikoba.mpoko(id_no , jumpla_mpoko , mkopo , riba , bima) " + 
              "VALUES  (@id, @jumla, @mkop, @riba, @bima)";

当然,文本框中的值应该是整数,否则该行的所有内容都会失败。确保使用 TryParse 更改该代码

 int result
 if(!Int32.TryParse(txtempty.Text, out result)
 {
      MessageBox.Show("Not a valid integer number");
      return;
 }
 id = result + 1;
 ....

再次查看查询的第二部分,用作参数输入的另一个文本框还存在其他潜在问题。每个参数都应该是 Int32,但您将字符串传递给参数值,并且您应该绝对确保它们是可转换为 Int32 的数字。查看所有内容,您将更改为此代码

private void btnenroll_Click(object sender, RoutedEventArgs e)
{
   string things;
   string morethings;
   try
   {
     int id;
     if(!Int32.TryParse(txtempty.Text, out id)
     {
          MessageBox.Show("Not a valid ID");
          return;
     }
     int jumla;
     if(!Int32.TryParse(txtjumla.Text, out jumla)
     {
          MessageBox.Show("Not a valid JUMLA");
          return;
     }
     int mkop;
     if(!Int32.TryParse(txtloan.Text, out mkop)
     {
          MessageBox.Show("Not a valid MKOP");
          return;
     }
     ....
     .... and so on for the other integer required by the second query
     ....

     id += 1;
     con.Open();

     things = "INSERT INTO vikoba.members(id_no , names_) VALUES (@id ,@name)";
     cmd = new MySqlCommand(things, con);
     cmd.Parameters.AddWithValue("@id", id);
     cmd.Parameters.AddWithValue("@name", txtname.Text);
     cmd.ExecuteNonQuery();

     morethings = "INSERT INTO vikoba.mpoko(id_no , jumpla_mpoko , mkopo , riba , bima) " + 
                  "VALUES  (@id, @jumla, @mkop, @riba, @bima) ";
     cmd = new MySqlCommand(morethings, con);
     cmd.Parameters.AddWithValue("@id", id);
     cmd.Parameters.AddWithValue("@jumla", jumla);
     cmd.Parameters.AddWithValue("@mkop", mkop);
     .... other parameters ...
     cmd.ExecuteNonQuery();
     con.Close();   
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message.ToString());
   }
}

关于c# - 我不断收到输入字符串的格式不正确的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20847533/

相关文章:

c# - 在 C# 中将字符串转换为 double 或任何数字类型变量

c# - WPF TextBox 和 RichTextBox 的组合

.net - 有谁知道如何让 WPF MessageBox 看起来更好(比如 Windows Forms equivelant)?

wpf - WPF使椭圆填充动画闪烁

c# - 逗号分隔的数值在 asp.net MVC 4 中验证失败

c# - 有没有办法阻止 EF 插入 SQL Server 计算列?

php - 如何限制已选择的查询?

php - 为什么我在 PHP PDO 请求中得到 "Unexpected T_AS"?

php - 有没有更快的方法从多个表中获取信息?

c# - 如何在 WPF 中获取 ListView 的选中行值