非删除列上的SQL删除查询

时间:2012-08-21 13:36:05

标签: sql-server vb.net

我是SQL查询语言的新手,我正试图弄清楚如何使用vb.net删除具有非密钥ID列值的行(在SQL DB表中)。例如,在下面的表TEST中:

ID     Name 
1      x 
2      y 
3      z

我有一个用户选择Name值的Windows窗体,但是当我运行我的代码时,它会显示

  

无法将varchar“y”转换为int。

这是我的代码尝试:

Dim sConnectionString As String

sConnectionString = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=SSPI;"

Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()

Dim cmd As New SqlCommand

cmd.Connection = objConn
cmd.CommandText = "DELETE FROM TEST WHERE Name = y"

cmd.ExecuteNonQuery()

谢谢!

3 个答案:

答案 0 :(得分:4)

如果Name列的类型为varchar,则需要将值括在单引号

cmd.CommandText = "DELETE FROM TEST WHERE Name = 'y'" 

您的问题的完整答案将是:

Dim sConnectionString As String 
sConnectionString = "Data Source=" + serverName + _
                     ";Initial Catalog=" + dbName + _ 
                     ";Integrated Security=SSPI;" 

Dim objConn As SqlConnection
Using(objConn = new SqlConnection(sConnectionString) 
    objConn.Open() 
    Dim cmd As New SqlCommand 
    cmd.Connection = objConn 
    cmd.CommandText = "DELETE FROM TEST WHERE Name = @name" 
    cmd.Parameters.AddWithValue("@name", txtName.Text)
    cmd.ExecuteNonQuery() 
End Using

我假设您的用户在文本框中插入要删除的名称,并将此值传递给参数化查询。参数化查询的使用将使您免于处理引用问题和Sql注入攻击的麻烦

答案 1 :(得分:3)

如果你这样做,你将删除所有行WHERE Name = y,你可能不希望这样做。

您应该在UI中使用该名称,但将ID传递给SQL。

如果你真的想要删除所有具有该名称的行,那么在y周围添加引号,因为没有它们,它会查找名为y的列:

DELETE FROM TEST WHERE Name = 'y'

答案 2 :(得分:0)

cmd.CommandText =“DELETE FROM TEST WHERE Name = y”;

相反,你可以使用这个

cmd.CommandText =“DELETE FROM TEST WHERE ID =”+ idValue;

这里'idValue'是你从用户那里得到的ID

或其他明智的

cmd.CommandText =“DELETE FROM TEST WHERE Name ='y'”;