0

この UI を介してデータベースに値を挿入しようとしています。以下はコードです。ここで、ID 列に直接値を取得させたいと考えています (主キーであり、その列に Identity も設定しています)。次に、他のすべての値をデータベースの対応する列に挿入する必要があります。今起きていることは、Name テキストボックスの値が ID 列に移動し、1 つずれてエラーが発生することです。どうすれば自分が望むものを達成できますか?

ここに画像の説明を入力

  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、文字列コマンドに2回追加しています。使い方が間違っているかもしれません。

あなたも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

As a best practice, you should always name your fields in an insert clause :

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

This ways, if you add a field to your table, you won't break your code...

于 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 に答える