c#-System.FormatException:“向导应包含32个数字和4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。”

时间:2018-10-17 09:16:15

标签: c# mysql database

数据库脱机时,我没有遇到此错误。我刚刚使用db4free.net在线建立了数据库。

我每次登录都会发生此错误。有人可以指出出什么问题吗?

private void btnLogIn_Click(object sender, EventArgs e)
    {
        string query = "select * from tbl_accounts where username='" + tbxUsername.Text + "' and password='" + tbxPassword.Text + "'";
        MySqlCommand command = new MySqlCommand(query, connection);
        MySqlDataAdapter da = new MySqlDataAdapter(command);
        DataTable dt = new DataTable();
        da.Fill(dt);

        try
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow dr = dt.Rows[i];

                if (dt.Rows.Count > 0)
                {
                    employee_id = (dr["employee_id"].ToString().PadLeft(4, '0'));
                    fullname = (dr["account_firstname"] + " " + dr["account_lastname"]).ToString();
                    this.Invoke(new Action(() =>
                    {
                        connection.Open();
                        command.ExecuteNonQuery();
                        connection.Close();
                        this.Close();
                        th = new Thread(openNewForm);
                        th.SetApartmentState(ApartmentState.STA);
                        th.Start();
                    }));
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

这是错误:

Exception screenshot

  

已更新:   这是我的连接字符串:

MySqlConnection connection = new MySqlConnection("datasource=db4free.net;Convert Zero Datetime=True;SslMode=none");

2 个答案:

答案 0 :(得分:0)

  1. 鉴于您的错误在这里发生,您的问题在此之前发生: da.Fill(dt);
  2. 您有两个数据库字段和两个控件
  3. 因此,您的问题可能与两个数据库字段之一(用户名或密码)有关
  4. 我认为用户名是varchar之类的
  5. 因此您的密码可能是一个GUID

结论:
您可能应该将tbxPassword.Text中提取的值格式化为GUID。
而且,如上所述,您也将要防止SQL注入。

答案 1 :(得分:0)

距OP发行日期几乎正好一年,我在尝试使用NuGet软件包MySQL.Data时遇到了相同的错误

我在此earlier StackOverflow post

的评论中找到了解决方法

基本上,可以通过将OldGuids=True;添加为MySQL数据库连接字符串的一部分来避免该错误,如@noontz所述。

但是,正如@BradleyGrainger所指出的那样,请注意,通过这样做,任何BINARY(16)列都将以Guid而不是byte[]的形式返回。