[英]SqlCommand with more than one result table
我正在使用Visual Studio 2010開發ASP.NET Web應用程序。我的目標框架是“.NET Framework 4”,我正在向SQL Server 2008數據庫發送查詢,該版本是“Microsoft SQL Server 2008 R2(SP2)” ”。
我正在使用以下連接字符串"Data Source=XXXX;Initial Catalog=XXXX;Integrated Security=False;User Id=XXXX;Password= XXXX;MultipleActiveResultSets=True"
並使用以下代碼發送查詢:
public static List<DataTable> getData(String query)
{
var results = new List<DataTable>();
try
{
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.CommandTimeout = 0;
using (SqlDataReader reader = command.executeReader())
{
do
{
while (reader.Read()) ;
var dataTable = new DataTable();
dataTable.Load(reader);
results.Add(dataTable);
} while (reader.NextResult());
}
connection.Close();
}
}
}
}
我發送的查詢是一個存儲過程,它返回兩個表,首先它有一個循環,根據一些內部條件調用另一個存儲過程,創建和插入tempdb..#table
和兩個SELECT語句。
但現在它只包含:
SELECT 1,2,3,4,5
SELECT 6,7,8,9,0
我不知道為什么但是reader.NextResult()
總是假的,所以我永遠不會得到第二個表的結果。
有誰知道我做錯了什么? 我該怎么做才能從查詢中接收和讀取兩個結果?
如果這是使用存儲過程,你需要這樣的東西: 注意命令類型
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];
好的,我已經運行了一些測試,發現問題來自dataTable.Load(reader);
不知何故,我不知道為什么以及該方法背后究竟發生了什么。 但如果你使用
do {
while(reader.Read()) {
...
}
} while (reader.NextResult());
一切都按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.