我是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()
谢谢!
答案 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'”;