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

问题描述 投票:1回答:2

我面临一个小问题。情况是:我有一个MSSQL表,其中包含IDs(整数,身份,主键)和names(字符串)。该表很大,所以我不想只为一个LINQ查询填充整个数据集。我有一个搜索算法,它用多个ID填充List<int>

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

dataGridView1.DataSource = tbl_WorklistTableAdapter.GetDataByID(ids_here);

但是我不能处理多个ID,只能处理一个。 The GetDataByID()代码需要这样(我认为):

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

但是WHERE ID IN接受逗号分隔的整数,例如1,2,3。但是@variable只是一个整数。

我应该如何将字符串转换为整数?

[谢谢,很抱歉造成我的麻烦。 :)

c# sql-server winforms visual-studio-2013 tableadapter
2个回答
1
投票

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

Like:-

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)

0
投票

您可以使用内置功能SPLIT_STRING功能:

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

这仅在兼容级别130或更高版本上有效。

如果您使用的是旧版SQL Server,则可以遵循this answer,它定义了等效功能:

SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM fn_split_string(@searchterm,','))
© www.soinside.com 2019 - 2024. All rights reserved.