0

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

ID     Name 
1      x 
2      y 
3      z

我有一个用户选择名称值的 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()

谢谢!

4

3 回答 3

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 Injection Attacks 的麻烦

于 2012-08-21T13:38:52.363 回答
3

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

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

如果您确实想删除具有该名称的所有行,请在 y 周围加上引号,因为没有它们,它正在寻找一个名为 y 的列:

DELETE FROM TEST WHERE Name = 'y'

于 2012-08-21T13:39:58.980 回答
0

cmd.CommandText = "从测试中删除名称 = y";

相反,您可以使用这个

cmd.CommandText = "从测试中删除 ID = " + idValue;

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

或其他明智的

cmd.CommandText = "从测试中删除名称 = 'y'";

于 2012-08-21T14:02:59.950 回答