gpt4 book ai didi

c# - 多张结果表的SqlCommand

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:54 26 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010 开发 ASP.NET Web 应用程序。我的目标框架是“.NET Framework 4”,我正在向版本为“Microsoft SQL Server 2008 R2”的 SQL Server 2008 数据库发送查询(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];

关于c# - 多张结果表的SqlCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com