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();
答案 0 :(得分:3)
名称中包含空格的字段应括在方括号
中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命令的字符串连接也是一个真正的错误。您接触Sql Injection,当有人试图插入带引号的用户名时,您的代码突然变得不再有效。
相反,像上面那样的parameterized query会删除这些弱点。
顺便说一下,虽然您仍然可以,但请更改该字段名称并删除空格。使用它没有任何好处,每个未来的查询都会受到这个令人讨厌的问题(缺少括号)的影响
答案 1 :(得分:1)
用括号括起user name
列(如果它实际上包含空格):
string a = @"insert into login([user name]) values ('"+TextBox1.Text+"')";
您还应该使用Parameterized Queries
答案 2 :(得分:0)
如果user name
列有空格,请用quotes
string a = @"insert into login(\"user name\") values ('"+TextBox1.Text+"')";
如果用户名列在用户和名称之间没有空格,那么您应该使用用户名
string a = @"insert into login(username) values ('"+TextBox1.Text+"')";