2012-09-06 16 views
0

我可以在sql查詢中使用一列本地DataTable嗎?如何?在sql中使用本地表變量asp.net中查詢代碼在

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。 ..

回答

0

你可以添加所有的ID作爲參數傳遞給一個IN子句中的SQL:

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); 
     } 
    } 
} 

請注意,您應該使用using -statements爲實現IDisposable一切(FE SqlConnectionDispose也關閉連接)。另外請注意,我只使用您的List<int>,第二個DataTable是多餘的。

+0

thx,效果很好。 – user1649498