从存储过程返回多个表
在我的winform应用程序中,我有以下场景:
我想在一个事件上获得多个表。 在single server cycle,
中将所有表作为dataset
返回single server cycle,
或者每次获取一个表并separate server cycle for each table
使用separate server cycle for each table
哪一个更好? 一个又一个有什么优势?
通常的方法是立即获得所有。
只需构造您的SELECT
,您将拥有一个填充所有表的DataSet
。
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(myConnString)) { using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand()) { cmd.CommandText = "myMultipleTablesSP"; cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; conn.Open(); System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); conn.Close(); } }
例如,如果您在SP中返回2个表,例如:
SELECT * FROM [TableA]; SELECT * FROM [TableB];
你可以访问这些表:
DataTable tableA = ds.Tables[0]; DataTable tableB = ds.Tables[1];
如果单独加载每个表并使用线程,则可以大大提高性能。
数据集也非常重…所以尽可能避免使用它们。