我有一个Session
,它是列表int
,我需要进行一个查询,该查询将仅从数据库中获取PK
值中存在Session
值的行{1}}。
我正在考虑使用IN
函数执行此操作,或者创建一个带有1个collumn的新数据表和来自Session的值并进行双连接,可能会留下...
我只是不知道如何从列表中创建一个表。
到目前为止我所拥有的:
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();
答案 0 :(得分:0)
创建临时表或表变量,使用INSERT
或BULK INSERT
将int插入其中,在SQL查询中执行连接,然后删除临时表或表变量。
答案 1 :(得分:0)
您可以通过多种方式执行此操作,但我的首选方法之一是将列表序列化为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
脚本如下:
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
答案 2 :(得分:0)
尝试更改您的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);