【问题标题】:C# MySQL encountering fatal error when inserting data into my tableC# MySQL 在向我的表中插入数据时遇到致命错误
【发布时间】:2016-05-14 13:39:29
【问题描述】:

我有一个名为“AddUser”的方法,它假设将数据插入到我的表中,但每当我执行它时,就会引发 MySqlException。

异常信息:

在命令执行过程中遇到致命错误。

我的专栏:

Column          Type         Null   Default           Comments
Identity Number int(11)      No                       auto_increment
Full Name       varchar(32)  No          
Birthday        date         No          
Sex             varchar(6)   No          
City            varchar(32)  No          
Region          varchar(32)  No          
Zip Code        varchar(10)  No          
Country         varchar(32)  No          
Phone Number    varchar(15)  No          
Email Address   varchar(255) No          
Ticket Number   varchar(8)   No          
Registration    timestamp    No     CURRENT_TIMESTAMP

我的代码:

private MySqlConnection mySqlConnection;

private async void OpenConnection()
{
    if (mySqlConnection == null)
    {
        mySqlConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString);
    }
    await mySqlConnection.OpenAsync();
}

private async void CloseConnection()
{
    if (mySqlConnection != null)
    {
        await mySqlConnection.CloseAsync();
    }
}

private async Task<bool> AddUser(
    string fullName,
    string birthday,
    string sex,
    string city,
    string region,
    string zipCode,
    string country,
    string phoneNumber,
    string emailAddress)
{
    try
    {
        OpenConnection();
        MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
        mySqlCommand.CommandText = string.Format("INSERT INTO Users (Identity_Number, Full_Name, Birthday, Sex, City, Region, Zip_Code, Country, Phone_Number, Email_Address, Ticket_Number, Registration_Time) VALUES (@Identity_Number, @Full_Name, @Birthday, @Sex, @City, @Region, @Zip_Code, @Country, @Phone_Number, @Email_Address, @Ticket_Number, @Registration_Time);");
        mySqlCommand.Parameters.Add("@Full_Name", MySqlDbType.VarChar).Value = fullName;
        mySqlCommand.Parameters.Add("@Birthday", MySqlDbType.Date).Value = birthday;
        mySqlCommand.Parameters.Add("@Sex", MySqlDbType.VarChar).Value = sex;
        mySqlCommand.Parameters.Add("@City", MySqlDbType.VarChar).Value = city;
        mySqlCommand.Parameters.Add("@Region", MySqlDbType.VarChar).Value = region;
        mySqlCommand.Parameters.Add("@Zip_Code", MySqlDbType.VarChar).Value = zipCode;
        mySqlCommand.Parameters.Add("@Country", MySqlDbType.VarChar).Value = country;
        mySqlCommand.Parameters.Add("@Phone_Number", MySqlDbType.VarChar).Value = phoneNumber;
        mySqlCommand.Parameters.Add("@Email_Address", MySqlDbType.VarChar).Value = emailAddress;
        mySqlCommand.Parameters.Add("@Ticket_Number", MySqlDbType.VarChar).Value = Guid.NewGuid().ToString().GetHashCode().ToString("X");

        await mySqlCommand.ExecuteNonQueryAsync();



CloseConnection();
            mySqlCommand.Dispose();
            return true;
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }
    }

是否有人能够检查我的代码并让我知道我做错了什么?也许我可以如何改进我的代码?提前致谢。

【问题讨论】:

  • 查询中不需要Identity_Number - MySQL 会生成它,您也不会为其提供值,因此参数多于值
  • Registration 在查询中被称为 Registration_Timeidentity_numberRegistration_time 在查询中都用作参数,但永远不会添加具有这些名称的参数。我认为您可能希望完全保留它们并使用默认值。
  • 在对列设置了自动增量属性的表中执行插入操作时,您排除了该列的插入。如果您需要知道身份字段的值是什么,请使用SELECT SCOPE_IDENTITY() into @SomeReturnValue
  • @Steve 是的,我知道,但 OP 可以做同样的事情,这就是我的观点..
  • 查看InnerException,它将包含真正的MySQL异常

标签: c# mysql exception


【解决方案1】:

感谢@Plutonix 的回答。我删除了下划线,并按照您的建议使用反引号转义了包含空格的列名。代码现在可以工作了。

            mySqlCommand.CommandText = string.Format("INSERT INTO Users (`Full Name`, Birthday, Sex, City, Region, `Zip Code`, Country, `Phone Number`, `Email Address`, `Ticket Number`) VALUES (@Full_Name, @Birthday, @Sex, @City, @Region, @Zip_Code, @Country, @Phone_Number, @Email_Address, @Ticket_Number);");

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多