2014-01-08 61 views
-3
string s = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"; 
SqlConnection c = new SqlConnection(s); 
SqlCommand cmd; 
string a = @"insert into login(user name) values ('"+TextBox1.Text+"')"; 
cmd = new SqlCommand(a,c); 
c.Open(); 
cmd.ExecuteNonQuery(); 
c.Close(); 
+2

您的INSERT查詢無效。它也開放給SQL注入,這是另一個(相當嚴重)的問題。 –

+0

如果'用戶名'是實際的列名,那麼您需要將其限定爲'insert into login([user name])values ...' – StuartLC

回答

0

如果user name列有空間,然後用quotes

string a = @"insert into login(\"user name\") values ('"+TextBox1.Text+"')"; 

圍繞着它。如果用戶名欄不具有用戶和名之間的空間,那麼你應該用戶的用戶名

string a = @"insert into login(username) values ('"+TextBox1.Text+"')"; 
1

環繞你的user name帶括號的列(如果它實際上包含空格):

string a = @"insert into login([user name]) values ('"+TextBox1.Text+"')"; 

你也應該使用包含名稱中有空格應在方括號

string s = @"Data Source=....."; 
using(SqlConnection c = new SqlConnection(s)) 
using(SqlCommand cmd = new SqlCommand("insert into login([user name]) " + 
             "values (@uname)", c)) 
{ 
    c.Open(); 
    cmd.Parameters.AddWithValue("@uname", textbox1.Text); 
    cmd.ExecuteNonQuery(); 
} 

而且記住,字符串連接來構建SQL命令是一個真正的錯誤也時封閉Parameterized Queries

3

字段中輸入您代碼似乎工作。你被暴露給Sql Injection,並且當有人試圖插入帶有引號的用戶名時,你的代碼突然不再起作用。
取而代之的是如上所述的parameterized query刪除這些弱點。

順便說一句,雖然你仍然可以,改變該字段的名稱,並刪除空間。使用它並沒有任何好處,每個將來的查詢都會受到這個惱人的問題的影響(丟失括號)

相關問題