c# - 从 C# Webforms 插入 MySQL 数据库,给出 ArgumentException

标签 c# mysql asp.net webforms argumentexception

我正在尝试使用将连接到 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/

相关文章:

javascript - 如何使用 Javascript 或 C# 禁用 Chrome 浏览器的打印预览功能

c# - 如何将此 foreach 代码转换为 Parallel.ForEach?

mysql - 将 character_set_client 指定为 MySQL 中表的默认字符集

mysql - 如何从sql中的sql查询结果中过滤数据

mysql - 按多语言领域分组

asp.net - VSTS 构建失败 - 错误 : Web deployment task failed

c# - 将 DataGridViewAutoFilter 与 Equin BindingListView 结合使用

c# - 在 Visual Studio 2019 中添加带有 css 类的 div 的键盘快捷方式

c# - 如何使用 Telerik Rad 网格绑定(bind)将数据传递给 Ajax 服务?

c# - 在 asp.net-mvc 中,如何在不降低用户体验的情况下运行昂贵的操作?