【问题标题】:C# TableAdapter Fill/Get by Multiple IDsC# TableAdapter 通过多个 ID 填充/获取
【发布时间】:2014-10-24 07:35:57
【问题描述】:

我遇到了一个小问题。情况是: 我有一个 MSSQL 表,其中包含 IDs(int、identity、primarykey)和 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


    【解决方案1】:

    在这种情况下,您需要更改 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)
    

    【讨论】:

      【解决方案2】:

      可以使用内置函数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,','))
      

      【讨论】:

      • 我会在几年后添加,因为 Google 仍然会带您回答这个问题。
      猜你喜欢
      • 1970-01-01
      • 2015-07-22
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多