我很高兴在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发送到数据库。
答案 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_username
,input_password
和input_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");";
只是为了测试,如果问题是参数。