c# - 具有多个结果表的 SqlCommand
问题描述
我正在使用 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];
推荐阅读
- neo4j - Neo4j 如果节点没有出边删除该节点,否则返回其下一个节点
- php - 从 PHP 中的 JSON 对象中提取 JSON 响应
- string - 管理 CStringArray 条目
- uicollectionview - iOS14 UICollectionView 无法正确显示
- html - 图标的 CSS 样式不跟随表格子项
- javascript - Vuejs bootstrap4单选按钮组在表格中没有反应
- r - 从 RStudio 服务器许可证过期的 GCloud VM 实例下载代码
- linux - 是否可以在引导顺序中更改 systemd (?) [FAILURE] [OK] 或 [SUCCESS] 等的颜色?
- ios - 如何在表格视图中的某些数据之后快速添加另一个部分(按钮)?
- python - 如何摆脱这个 .plot.bar() 熊猫图的 y 轴上的科学符号?