C# asp.net C sql查询依赖于会话数据

C# asp.net C sql查询依赖于会话数据,c#,asp.net,sql,code-behind,C#,Asp.net,Sql,Code Behind,我有一个会话,它是list int,我需要做一个查询,只从数据库中获取会话中存在的具有PK值的行 我正在考虑使用IN函数,或者使用会话中的1个collumn和值创建一个新的数据表,然后进行双连接,可能是左连接 我只是不知道如何从一张单子上做一张桌子 到目前为止,我所拥有的: String ConnString = "Data Source=BRACO-PC\SQL1;Initial Catalog=DiplomskiSQL1SQL;Integrated Security=True"; SqlCo

我有一个会话,它是list int,我需要做一个查询,只从数据库中获取会话中存在的具有PK值的行

我正在考虑使用IN函数,或者使用会话中的1个collumn和值创建一个新的数据表,然后进行双连接,可能是左连接

我只是不知道如何从一张单子上做一张桌子

到目前为止,我所拥有的:

String ConnString = "Data Source=BRACO-PC\SQL1;Initial Catalog=DiplomskiSQL1SQL;Integrated Security=True";
SqlConnection Conn = new SqlConnection(ConnString);
Conn.Open();
DataTable ukosarici = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("Select Proizvodi.ime, TipProizvoda.tip, Proizvodi.dimenzije, Proizvodi.cijena from Proizvod LEFT JOIN TipProizvoda On Proizvod.tip=TipProizvoda.id_t WHERE Proizvod.id_p IN ", Conn);
SqlCommandBuilder cmd = new SqlCommandBuilder(da);
da.Fill(ukosarici);
GridView1.DataSource = ukosarici;
GridView1.DataBind();
Conn.Close();

创建一个临时表或表变量,使用insert或BULK insert将INT插入其中,在SQL查询中进行连接,然后删除临时表或表变量。

有很多方法可以做到这一点,但我首选的方法之一是将列表序列化为CSV,例如“1,3,5,33”。然后,我使用自定义SQL表函数对数据库中的列表和过滤器进行反序列化:

SELECT * FROM mytable t
JOIN dbo.ufn_CSVtoTextList('1,3,5,33' , ',') csv
ON csv.[Entry] = t.Id 
ufn_CSVtoTextList函数创建脚本如下:

CREATE FUNCTION [dbo].[ufn_CSVToTextlist] ( @StringInput nVARCHAR(max) ,@SepChar nchar(1) = ',')
RETURNS @OutputTable TABLE ( [Entry] nVarchar(255), [index] int identity (0,1) )
AS
BEGIN

    DECLARE @Entry   nVarChar(255)

    WHILE LEN(@StringInput) > 0
    BEGIN
        SET @Entry      = LEFT(@StringInput, 
                                ISNULL(NULLIF(CHARINDEX(@SepChar, @StringInput) - 1, -1),
                                LEN(@StringInput)))
        SET @StringInput = SUBSTRING(@StringInput,
                                     ISNULL(NULLIF(CHARINDEX(@SepChar, @StringInput), 0),
                                     LEN(@StringInput)) + 1, LEN(@StringInput))

        INSERT INTO @OutputTable ( [Entry] )
        VALUES ( @Entry )
    END

    RETURN
END

尝试如下更改SqlDataAdapter调用

 List<int> list ; // Assign with your session int list values
            List<string> l2 = list.ConvertAll<string>(delegate(int i) { return i.ToString(); });
            string query = "Select Proizvodi.ime, TipProizvoda.tip, Proizvodi.dimenzije, Proizvodi.cijena from Proizvod LEFT JOIN TipProizvoda On Proizvod.tip=TipProizvoda.id_t WHERE Proizvod.id_p IN (";
            query = query + string.Join(",", l2.ToArray()) + ")";
            SqlDataAdapter da = new SqlDataAdapter(query, Conn);