【问题标题】:using local table variable in sql asp.net query code behind在sql asp.net后面的查询代码中使用本地表变量
【发布时间】:2012-09-07 01:07:57
【问题描述】:

我可以在 sql 查询中使用带有一列的本地 DataTable 吗?怎么做?

List<int> k_p = null;
k_p = new List<int>();
k_p = (List<int>)Session["kosarica"];
DataTable spremljeno = new DataTable();
spremljeno.Columns.Add("id_k_p");
for(int i=0; i<k_p.Count; i++)
{
    spremljeno.Rows.Add(k_p[i]);
}
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 Proizvod.id_p, Proizvod.ime, TipProizvoda.tip, Proizvod.dimenzije, Proizvod.cijena FROM Proizvod LEFT JOIN TipProizvoda ON Proizvod.tip=TipProizvoda.id_t WHERE Proizvod.id_p IN @spremljeno", Conn);
SqlCommandBuilder cmd = new SqlCommandBuilder(da);
da.Fill(ukosarici);
GridView1.DataSource = ukosarici;
GridView1.DataBind();
Conn.Close();

我只想显示 id_p 等于 spremljeno 中的值的数据,并且不想在 db 中做一个临时表,但不知道是否可能...正在连接到 SQL server 2008...

【问题讨论】:

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


    【解决方案1】:

    您可以将所有 ID 作为参数添加到 SQL 中的 IN 子句:

    var parameters = new string[k_p.Count];
    using(var cmd = new SqlCommand())
    {
        for (int i = 0; i < k_p.Count; i++)
        {
            parameters[i] = string.Format("@id_p{0}", i);
            cmd.Parameters.AddWithValue(parameters[i], k_p[i]);
        }
        var sql = "Select Proizvod.id_p, Proizvod.ime, TipProizvoda.tip, Proizvod.dimenzije, Proizvod.cijena FROM Proizvod LEFT JOIN TipProizvoda ON Proizvod.tip=TipProizvoda.id_t WHERE Proizvod.id_p IN ({0})";
        cmd.CommandText = string.Format(sql, string.Join(", ", parameters));
        using(var con = new SqlConnection(connStr))
        {
            cmd.Connection = con;
            using(var da = new SqlDataAdapter(cmd))
            {
                da.Fill(ukosarici);
            }
        }
    }
    

    请注意,您应该对实现 IDisposable 的所有内容使用 using-statements(例如,SqlConnectionDispose 也会关闭连接)。另请注意,我只使用了您的List&lt;int&gt;,第二个DataTable 是多余的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多