【问题标题】:asp.net C# sql query dependant on session dataasp.net C# sql 查询依赖于会话数据
【发布时间】:2012-09-06 22:07:37
【问题描述】:

我有一个Session,它是列表int,我需要进行一个查询,该查询将只从数据库中获取那些具有PK 值的行,该值存在于Session 中。

我正在考虑使用IN 函数来做这件事,或者用 1 个列和 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();

【问题讨论】:

    标签: c# asp.net sql code-behind


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点,但我首选的方法之一是将列表序列化为 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
      

      【讨论】:

        【解决方案3】:

        尝试如下更改 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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-16
          • 2017-06-25
          • 1970-01-01
          相关资源
          最近更新 更多