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 - 异步方法

SqlDataAdapter.Fill(DataGridView.DataSource) 复制所有行

SqlDataAdapter.Fill 方法慢

SqlDataAdapter.Fill 方法慢

使用 sqldataadapter.fill 刷新数据 - 看不到新数据

SQLDataAdapter Fill 方法如何触发数据库查询?