SqlDataAdapter.Fill 方法不会给出任何错误,但也不会返回任何数据以用于长时间运行的查询 ado.net core SQL Server
Posted
技术标签:
【中文标题】SqlDataAdapter.Fill 方法不会给出任何错误,但也不会返回任何数据以用于长时间运行的查询 ado.net core SQL Server【英文标题】:SqlDataAdapter.Fill method does not give any error but also not return any data for long running query ado.net core SQL Server 【发布时间】:2019-08-10 09:24:38 【问题描述】:我正在使用 SQLDataAdapter 填充数据集,我从 SQL 服务器存储过程中获得结果。我的 SP 正在后端数据库中执行,大约需要 30 秒才能执行。但是 DataAdatpter.Fill 会在几分之一秒内执行,而不会返回任何类型的异常(包括超时)。想知道发生了什么,因为数据集中没有数据,我无法继续进行。
我尝试将连接和命令超时设置为 360 秒,即使没有超时异常。 我尝试使用 SQLDataReader 而不是 Adapter 仍然没有结果。 我尝试并为连接适配器添加了 using 子句,但没有运气。
using (SqlConnection con = new SqlConnection(GetConnectionString(true)))
using (SqlCommand cmd = new SqlCommand("[dbo].[SearchCompanies]"))
DataSet ds = new DataSet();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 360;
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.Parameters.Add(param3);
/*Method 1*/
//SqlDataAdapter da = new SqlDataAdapter(cmd);
//da.Fill(ds);
//con.Open();
/*Method 2*/
//using (SqlDataReader sdr = cmd.ExecuteReader())
//
// int i = 0;
// do
//
// ds.Tables[i].Load(sdr);
// i++;
//
// while (sdr.NextResult());
//
//con.Close();
/*Method 3*/
using (var adapter = new SqlDataAdapter(cmd))
try
adapter.Fill(ds);
catch (Exception ex)
throw ex;
DataTable dt = ds.Tables[0];
对于这个长时间运行的进程,即使命令超时,我也没有收到任何错误消息。
我希望数据适配器应该从 .net CORE ADO.net 中长期运行的 SP 中获得一些结果
【问题讨论】:
所有代码看起来都很好。创建具有相同签名的简化存储过程以进行故障排除。 【参考方案1】:谢谢。。我调试了代码,后来发现这个问题是由于布尔输入参数之一为空。通过处理布尔值问题得到解决
【讨论】:
以上是关于SqlDataAdapter.Fill 方法不会给出任何错误,但也不会返回任何数据以用于长时间运行的查询 ado.net core SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
SqlDataAdapter.Fill(DataGridView.DataSource) 复制所有行