2015-12-07 165 views
-5

我的代码有问题。我没有在任何时候使用过SQL服务,因此找出问题的原因有点棘手。主要问题是它在标题上说什么,我得到不正确的语法,当我尝试Read,UpdateDelete数据从SQL database“*”附近的语法错误

下面是代码:

string Connection2 = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\AuthMyRegistery\AuthMyRegistery\Data.mdf;Integrated Security=True;User Instance=True"; 
string Query = "delete from * where idWorkerInfo='" + this.WorkerIdTextBox.Text + "';"; 
SqlConnection Conn2 = new SqlConnection(Connection2); 
SqlCommand Command2 = new SqlCommand(Query, Conn2); 
SqlDataReader Reader2; 
Conn2.Open(); 
Reader2 = Command2.ExecuteReader(); 
MessageBox.Show("Data Deleted"); 
while (Reader2.Read()) 
{ 
} 
Conn2.Close(); 
+0

你从哪里得到那个错误? “this.WorkerIdTextBox.Text”中有什么?甚至听说过参数化查询? –

+1

也许您需要重新读取DELETE语句所需的语法 – Steve

+2

您绝不应将TextBox的内容直接放入sql字符串中。谷歌SQL注入... –

回答

3

“*”是不是一个delete语句,你想从删除的内容表中的有效目标是什么?

的语法应该是这样的

delete from MyTable where idWorkerInfo='abc' 
5

问题就在这里,没有表名定义

delete from * where idWorkerInfo= 

应该

Delete From TableName where idWorkerInfo= 
3

你需要指定表的名称,而不是的通配符。

DELETE语句的基本语法如下(请参阅MSDN中的全部文件 - DELETE (Transact-SQL)):

DELETE FROM table_name 
WHERE some_column=some_value; 

而且,你不应该使用字符串连接(从未不断被创建的SQL查询在生产中使用它),因为这会使您容易受到SQL注入攻击。

相反,你应该使用参数化查询,以便所有用户输入被正确地转义:

var cmd = new SqlCommand("DELETE FROM MyTable WHERE [email protected]", conn2); 
cmd.Parameters.AddWithValue("@id", WorkerIdTextBox.Text); 
cmd.ExecuteNonQuery(); 
2

有一个在delete没有* ...的删除语法如下

DELETE FROM table_name 
WHERE some_column = some_value; 
2

查询本身不正确。

考虑一下:

delete from * where idWorkerInfo='Sth' 

您需要更换*与实际的表名。