没有数据发送到MySQL数据库

时间:2015-01-23 07:03:53

标签: c# mysql

我很高兴在C#中使用MySQL,我不明白这里有什么问题。我的代码能够连接到我的数据库,但即使3个文本框中有文本,也不会发送任何数据。

public static void testSendData ()
        {
            MainWindow form = new MainWindow();
            string input_username = form.textUsername.Text; 
            string input_password = form.textPassword.Text; 
            string input_email = form.textEmail.Text; 

            MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder(); 
            builder.Server = "localhost"; 
            builder.UserID = "root"; 
            builder.Password = "root"; 
            builder.Database = "authentication"; 
            MySqlConnection connection = new MySqlConnection(builder.ToString()); 
            connection.Open();
            string newuser_sql = "INSERT INTO `authentication`.`account` (`username`, `sha_pass_hash`, `email`) VALUES ('@username', '@pass', '@email');"; 
            MySqlCommand newuser = new MySqlCommand(newuser_sql, connection); 
            newuser.CommandText = newuser_sql; 
            newuser.Parameters.AddWithValue("@username", input_username); 
            newuser.Parameters.AddWithValue("@pass", input_password); 
            newuser.Parameters.AddWithValue("@email", input_email); 
            newuser.ExecuteNonQuery(); 
            MessageBox.Show("Worked."); 
        } 

编辑:我更新了我的" newuser_sql"字符串,它现在将发送数据,但它将文字@username,@ pass,@ email发送到数据库。

3 个答案:

答案 0 :(得分:1)

MySQL .NET提供程序命令参数格式与典型格式不同。

试试这个:

string newuser_sql = "INSERT INTO `authentication`.`account` (`username`, `sha_pass_hash`, `email`) VALUES (?username, ?pass, ?email);";
//..
newuser.Parameters.AddWithValue("?username", input_username); 
newuser.Parameters.AddWithValue("?pass", input_password); 
newuser.Parameters.AddWithValue("?email", input_email); 

如果此项为空,则调试input_usernameinput_passwordinput_email实际上包含非空值

更新

事实证明,这些天它实际上应该与@一起使用(只是没有参数的引号),所以检查你实际上是否传入了任何数据(制作一个断点并调试其值)添加参数时input_username等。

答案 1 :(得分:0)

尝试更改此部分:(修改末尾的MySqlDbType)。

删除查询中的单引号。

删除newuser.CommandText = newuser_sql;,因为您已经在MySqlCommand参数上添加了newuser_sql。

string newuser_sql = "INSERT INTO authentication.account (username, sha_pass_hash, email) VALUES (@username, @pass, @email)";
newuser.Parameters.Add("@username", MySqlDbType.VarChar).Value = input_username; 
newuser.Parameters.Add("@pass", MySqlDbType.VarChar).Value =  input_password; 
newuser.Parameters.Add("@email", MySqlDbType.VarChar).Value = input_email;

答案 2 :(得分:0)

如果删除插入的简单引号并没有改变任何内容,我会尝试插入没有参数的数据:

      string newuser_sql = "INSERT INTO `authentication`.`account` (`username`, `sha_pass_hash`, `email`) VALUES ("+input_username"+, +"input_username"+, +"input_username");"; 

只是为了测试,如果问题是参数。