我正在尝试使用将连接到 MySQL 数据库并插入数据的 Webforms 创建一个注册页面,但它会抛出一个 ArgumentException(即使我相信我完全按照我的教程进行操作)并且不会插入表中的数据。
因此,我的注册页面 C# 代码是:
public partial class Registration : System.Web.UI.Page
{
MySql.Data.MySqlClient.MySqlConnection conn;
MySql.Data.MySqlClient.MySqlCommand cmd;
String queryStr;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void registerEventMethod(object sender, EventArgs e)
{
registerUser();
}
private void registerUser()
{
String connString =
System.Configuration.ConfigurationManager.ConnectionStrings["WebAppConnString"].ToString();
conn = new MySql.Data.MySqlClient.MySqlConnection(connString);
conn.Open();
queryStr = "";
queryStr = "INSERT INTO seniorschema.registration (Password1, Email, FirstName, LastName, Password2, Code)" +
"VALUES('" + PasswordTextBox1.Text +"','"+ EmailTextbox.Text +"','"+ firstNameTextBox.Text+"','"+ LastNameTextBox.Text + "' ,'"+ PasswordTextBox2.Text +"', '"+ CodeTextBox.Text + "' )";
cmd = new MySql.Data.MySqlClient.MySqlCommand(queryStr, conn);
cmd.ExecuteReader();
conn.Close();
}
}
我在 WebConfig 文件中的连接在这里:
<connectionStrings>
<add name="WebAppConnString"
connectionString="server=localhost;ID=webuser;pwd=password;database=seniorschema;"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
任何帮助将不胜感激。谢谢!
最佳答案
我不知道你在读什么教程,但他们不应该教你在构建 sql 命令文本时使用字符串连接。
但是,您收到的错误来自连接字符串。
你应该写
String connString =ConfigurationManager.ConnectionStrings["WebAppConnString"].ConnectionString;
web.config 中连接字符串的定义也有错误(打字错误?)
它是 Uid=....
而不是 ID=....
这里我将如何编写添加记录的代码。
using MySql.Data.MySqlClient;
....
queryStr = @"INSERT INTO seniorschema.registration
(Password1, Email, FirstName, LastName, Password2, Code)
VALUES(@pwd, @email, @first, @last, @pwd2, @code";
using(MySqlConnection conn = new MySqlConnection(connString))
using(MySqlCommand cmd = new MySqlCommand(queryStr, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@pwd",PasswordTextBox1.Text);
cmd.Parameters.AddWithValue("@email",EmailTextbox.Text );
cmd.Parameters.AddWithValue("@first",firstNameTextBox.Text);
cmd.Parameters.AddWithValue("@last",LastNameTextBox.Text );
cmd.Parameters.AddWithValue("@pwd2",PasswordTextBox2.Text );
cmd.Parameters.AddWithValue("@code",CodeTextBox.Text);
int rowAdded = cmd.ExecuteNonQuery();
}
这种方法消除了字符串连接以及正确编码值周围引号所需的所有复杂性,也消除了 Sql Injection 的任何可能性。
最后,但这确实是一个过于宽泛的论点,并没有立即与您的问题联系起来。
从安全的角度来看,以明文形式存储密码是一种不好的做法。如果有人能得到一份或阅读注册表,他/她将能够阅读所有注册用户的密码。有经过验证的方法 store an hash of the password让旁观者无法阅读它们
关于c# - 从 C# Webforms 插入 MySQL 数据库,给出 ArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261858/