0

我正在尝试通过此 UI 将值插入数据库。下面是代码。现在我希望 ID 列直接取值(它是主键,我还在该列上设置了 Identity)。接下来,应将所有其他值插入到数据库中的相应列中。现在发生的事情是,名称文本框中的值转到 ID 列,它会导致一个错误的错误。我怎样才能达到我想要的?

在此处输入图像描述

  protected void btnRegister_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
        string strQuery = "Insert into AUser values ('"+ txtName.Text +"', '"+ txtEmailAddress.Text +"', '"+txtPassword.Text +"', '"+ ddlMobile.Text +"', '"+ ddlMobile.Text +"', '"+ txtMobileNumber.Text +"' )";
        SqlCommand Cmd = new SqlCommand(strQuery,con);
        con.Open();
        Cmd.ExecuteNonQuery();

在此处输入图像描述

4

5 回答 5

3

新人写这样的代码!

始终使用参数化查询。此代码对SQL 注入攻击开放。

SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);      
string strQuery = "Insert into AUser(Name, Email, Password, CountryCode, Mobile, MobileNumber) values (@Name, @EmailAddress, @Password, @Mobile, @MobileNumber)";
SqlCommand Cmd = new SqlCommand(strQuery,con);
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@EmailAddress", txtEmailAddress.Text);
cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
cmd.Parameters.AddWithValue("@Mobile", ddlMobile.Text);
cmd.Parameters.AddWithValue("@MobileNumber", txtMobileNumber.Text);
con.Open();
Cmd.ExecuteNonQuery();

顺便说一句ddlMobile.Text,您在字符串命令中添加了两次。那可能是错误的使用。

您也没有使用CountryCode列..

于 2013-03-20T12:15:43.430 回答
2

你应该像这样构造你的 sql 语句:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

其中值应通过 SQL 参数填充。

另外,如果您想直接在 ID 列中取值,为什么首先将其设置为 Auto?

于 2013-03-20T12:13:57.220 回答
1

您的查询必须是这样的

 string strQuery = "Insert into AUser(Name,Email,Password,CountryCode,Mobile) values ('"+ txtName.Text +"', '"+ txtEmailAddress.Text +"', '"+txtPassword.Text +"', '"+ ddlMobile.Text +"', '"+ ddlMobile.Text +"', '"+ txtMobileNumber.Text +"' )";
于 2013-03-20T12:11:40.363 回答
1

作为最佳实践,您应该始终在插入子句中命名您的字段:

string strQuery = "Insert into AUser(name,email,password,countrycode,mobile) values ('"+ txtName.Text +"', '"+ txtEmailAddress.Text +"', '"+txtPassword.Text +"', '"+ ddlMobile.Text +"', '"+ ddlMobile.Text +"', '"+ txtMobileNumber.Text +"' )"

这样,如果您向表中添加一个字段,您就不会破坏您的代码......

于 2013-03-20T12:12:47.437 回答
0

获得该权利的最简单方法是在插入查询中指定列名

Insert into AUser (Name, Email, [Password], CountryCode, Mobile)values (@Name, @Email,@Password, @CountryCode, @Mobile)

你目前的sql容易受到sql注入攻击。

像这样添加参数值

SqlCommand Cmd = new SqlCommand(strQuery,con);
Cmd.Parameters.AddWithValue("@Name", txtName.Text);
...
con.Open();
Cmd.ExecuteNonQuery();
于 2013-03-20T12:14:59.847 回答