2013-03-20 55 views
0

我試圖通過這個用戶界面將值插入到數據庫中。以下是代碼。現在我想讓ID列直接取值(其主鍵&我也在該列上設置了Identity)。接下來,所有其他值應插入到數據庫中的相應列中。 Rt現在最新發生的情況是,名稱文本框中的值轉到ID列&,它導致錯誤的結果。我如何實現我想要的?如何直接插入標識列的值?

enter image description here

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(); 

enter image description here

+7

在一個側面說明,請停止使用內嵌參數。嘗試使用數據庫參數,否則您將獲得SQL注入。 – Yahya 2013-03-20 12:11:31

+0

不明白... – adityawho 2013-03-20 12:15:38

+1

看看這個:http://xkcd.com/327/ – Yahya 2013-03-20 12:18:05

回答

1

您的查詢必須是這樣的

string strQuery = "Insert into AUser(Name,Email,Password,CountryCode,Mobile) values ('"+ txtName.Text +"', '"+ txtEmailAddress.Text +"', '"+txtPassword.Text +"', '"+ ddlMobile.Text +"', '"+ ddlMobile.Text +"', '"+ txtMobileNumber.Text +"')"; 
+2

不,它「一定」不是。在某些情況下它是一種解決方案。 – CodeCaster 2013-03-20 12:18:36

1

最佳做法是,你應該總是名字在INSERT子句的字段:

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

這種方式,如果你添加一個字段到你的表,你會不會破壞你的代碼...

+0

好的,謝謝......但我如何爲列「ID」生成值? – adityawho 2013-03-20 12:19:24

+0

如果你爲該字段定義了標識,sql server會爲你生成它.... – 2013-03-20 12:29:21

2

您應該構建您的SQL語句,如:

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

其中值應通過SQL填充參數。

此外,如果您想直接在ID列中取值,您爲什麼將它設置爲Auto?

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(); 
+0

由於'密碼'在SQL Server中不是_reserved關鍵字_,所以你不需要'']'''''' – 2013-03-20 12:24:35

+0

既然它顯示爲藍色,我選擇謹慎':)' – nunespascal 2013-03-20 12:39:50

3

較新的寫代碼!

始終使用parameterized queries。此代碼對於SQL Injection攻擊是開放的。

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(); 

BTW,要添加ddlMobile.Text兩次到您的字符串命令。這可能是錯誤的使用。

您沒有使用CountryCode柱也..