2010-09-30 41 views
0

我在表单上有一个文本框和一个按钮。使用Vb.net中的IN子句将某些内容保存到使用SQL的数据库中

我希望运行一个查询(在Vb.Net中),它将产生一个IN值的查询。

下面是我的代码示例

myConnection = New SqlConnection("Data Source=sqldb\;Initial Catalog=Rec;Integrated Security=True") 
myConnection.Open() 
myCommand = New SqlCommand("UPDATE dbo.Recordings SET Status = 0 where RecID in ('" & txtRecID.Text & "') ", myConnection) 
ra = myCommand.ExecuteNonQuery() 
myConnection.Close() 
MsgBox("Done!", _ 
MsgBoxStyle.Information, "Done") 

当我进入它的工作原理单个值,但是当我输入值之间用逗号它抛出一个错误:

"Conversion failed when converting the varchar value '1234,4567' to data type int."

可能有人请帮助我解决这个问题还是有其他方法?

非常感谢

+0

改为尝试'MsgBox(myCommand.CommandText)'。你会看到它。 – GSerg 2010-09-30 10:31:30

回答

3

尝试删除单引号你包裹IN值:

myCommand = New SqlCommand("UPDATE dbo.Recordings SET Status = 0 WHERE RecID IN (" & txtRecID.Text & ") ", myConnection) 
+0

这很好用!非常感谢你。那么,单引号是干什么的?只是想了解它请 – 2010-09-30 11:06:51

1

如果您在测试多个值的字符串变量,那么这些多个值需要在引号中。

你第一次尝试“几乎”工作的原因是因为你也可以用引号中的每个单独的值生成你的SqlCommand。 I.E.
UPDATE dbo.Recordings SET Status = 0 where RecID IN ('1234', '5678')

在这种情况下,T-SQL会做每一个字符串值的隐式转换为INT, 这正是它试图当你给它“1234,5678”但ISN做作为一个INT不可辨认。

相关问题