C#通过多个ID填充/获取TableAdapter

C#通过多个ID填充/获取TableAdapter,c#,sql-server,winforms,visual-studio-2013,tableadapter,C#,Sql Server,Winforms,Visual Studio 2013,Tableadapter,我面临一个小问题。情况是: 我有一个MSSQL表,其中包含id(int、identity、primarykey)和名称(string)。 这个表很大,所以我不想只为一个LINQ查询填充整个数据集。 我有一个搜索算法,它用多个ID填充列表 我想用以下代码加载datagridview中的匹配行: dataGridView1.DataSource = tbl_WorklistTableAdapter.GetDataByID(ids_here); 但我不能处理多个ID,只有一个GetDataByID(

我面临一个小问题。情况是: 我有一个MSSQL表,其中包含
id
(int、identity、primarykey)和
名称(string)。
这个表很大,所以我不想只为一个LINQ查询填充整个数据集。
我有一个搜索算法,它用多个ID填充
列表

我想用以下代码加载datagridview中的匹配行:

dataGridView1.DataSource = tbl_WorklistTableAdapter.GetDataByID(ids_here);
但我不能处理多个ID,只有一个<代码>GetDataByID()
代码应该是这样的(我认为):

但是
中的ID接受逗号分隔的int,比如
1,2,3
。但是@variable只是一个int

如何将字符串转换为整数


感谢您,并为错误的英语感到抱歉:)

在这种情况下,您需要在sql中进行更改,因此需要为逗号分隔的id生成一个临时表,并在查询中应用条件

如:-

DECLARE @variables VARCHAR(200) = @searchterm -- Your Variable
CREATE TABLE #temp(ID NUMERIC) DECLARE @temp VARCHAR(200)
SET @temp = @variables WHILE LEN(@temp) > 0 BEGIN DECLARE @t1 VARCHAR(200)
IF   CHARINDEX(',',@temp) > 0 
 BEGIN
   SET @t1 = SUBSTRING(@temp,0,CHARINDEX(',',@temp))
   INSERT INTO #TEMP SELECT @t1
   SET @temp = SUBSTRING(@temp,CHARINDEX(',',@temp)+1,len(@temp)) 
 END 
 ELSE 
 BEGIN
   INSERT INTO #TEMP SELECT @temp
   SET @temp = '' 
   END 
END  
SELECT [ID]
  ,[NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT ID FROM #temp)

您可以使用内置功能:

SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM SPLIT_STRING(@searchterm,','))
SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM fn_split_string(@searchterm,','))
这仅适用于兼容级别130或更高

如果您使用的是较旧版本的SQL Server,则可以遵循该操作,该操作定义了一个等效函数:

SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM SPLIT_STRING(@searchterm,','))
SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM fn_split_string(@searchterm,','))

我在几年后加上这句话是因为谷歌仍然会把你带到这个问题上。