2009-03-04 61 views
0

在我编写的每个ASP.NET应用程序中,我会在将信息输出到网页之前向数据库发出请求数。如何在ASP.NET C#中执行多个数据库请求?

例如:

var DataTable1 = GetDataTable("Select * From Customers"); 
var DataTable2 = GetDataTable("Select * From Products"); 
var DataTable3 = GetDataTable("Select * From Orders"); 

据我所知,上面的代码将使3个独立的旅行数据库中,并会做他们一个接一个。

无论如何,我可以将我的参数化SQL语句聚集在一起,并且只做1次到数据库服务器的访问?

+0

一种更好的方式来形容这将是“在一次旅行多个数据库请求”,而不是“并行数据库请求”。 “平行”意味着它们都是同时发生的,这似乎并不是你想要的;有办法做到这一点,虽然这对网页没什么意义。 – 2009-03-05 14:02:03

+0

谢谢你的抬头。你的权利。我已经改变了标题:) – GateKiller 2009-03-05 18:25:55

回答

6
var SqlString = "SELECT * FROM Customers; SELECT * FROM Products; SELECT * FROM ORDERS;"); 
var ds = GetDataSet(SqlString); 
var DataTable1 = ds.Tables(0); 
var DataTable2 = ds.Tables(1); 
var DataTable3 = ds.Tables(2); 
0

用分号来分隔SQL语句和reader.NextResult获得各组。你的代码最终会看起来像这样。

Using con As New SqlConnection 
     Using cmd As New SqlCommand("Select * From Customers; Select * From Products; Select * From Orders") 
      Using reader = cmd.ExecuteReader 
       Dim dt1 As DataTable 
       dt1.Load(reader) 

       reader.NextResult() 

       Dim dt2 As DataTable 
       dt2.Load(reader) 

       reader.NextResult() 


       Dim dt3 As DataTable 
       dt3.Load(reader) 

      End Using 
     End Using 
    End Using 
1

我的解决办法:

SqlConnection con = new SqlConnection("Server=CLASS-III-WKS10\\SQLEXPRESS;Initial 
Catalog=wind;Integrated Security=True"); 
int[] id=new int[9]; 
int i = 0; 
page_load() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select *from windmill", con); 
    SqlDataReader rd = cmd.ExecuteReader(); 
    while (rd.Read()) 
    { 
     id[i] = rd.GetInt32(9); 
     i++; 
     //MessageBox.Show(id.ToString()); 
    } 
    rd.close(); 
    SqlCommand cmd1 = new SqlCommand("Update windmill set State='Stopped',PmState='Not Available'where Id=0", con); 
    cmd1.ExecuteNonQuery(); 
}