sqlserver-c#adapter.fill数据集不能与存储过程一起使用,即使我知道参数正在返回数据



我遇到了最奇怪的问题。以下大部分时间都有效,但"偶尔"它无法返回数据,即使我为adapter.fill语句设置了断点,检查了参数并通过SQL Management Studio执行它们,SQL Management Studio肯定会返回数据:(

所以这是一个标准的c#SQL客户端调用:

SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure;
command.Connection = connection;

连接肯定是正常打开和使用的,因为它也通过另一个调用使用。。实际上,后续的调用也起作用。。然而,在我的情况下,以下"有时"失败:

command.CommandText = "myprocname";
command.Parameters.AddWithValue("@param1", param1value);
command.Parameters.AddWithValue("@param2", param2value);
command.Parameters.AddWithValue("@param3", param3value);
command.Parameters.AddWithValue("@param4", param4value);

然后填充数据集:

DataSet ds = new DataSet();
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
    adapter.Fill(ds);
}
command.Dispose();

所以真的没有什么奇怪的事情发生,上面的大部分时间都是有效的。。有时它没有返回我期望的结果,并在adapter.fill语句之前放置了一个断点,检查了命令文本和正在传递的每个参数/值。。打开sqlmanagementstudio,使用这些params运行proc,并确保返回了预期的数据。

过程非常简单,而且大部分时间都返回数据。。。

无论如何,我都不能对proc出错,但这让我抓狂,因为我检查了连接超时、执行时间等等。我想最疯狂的是proc名称和参数都是正确的(没有意外传递额外的参数等(。。并且手动运行时,它会返回数据。。但通过fill语句,它似乎不是(但只是偶尔!(。

非常感谢对这种疯狂行为的任何帮助!!

决议:好吧。。最奇怪的错误,一个真正让我震惊的错误。

在发布这个问题时,我没有提到我正在使用RDLC/Reportviewer控件在一组仪表板图表中显示数据。。即,您可以选择一个图表段(例如饼图切片(来深入查看该数据。。图表数据是"预先分组的",即这些图表的proc没有包含详细信息,以便快速显示仪表板。。

不管怎样,我跑题了,因为我有一些"坏数据"。。well数据的日期为空,而短篇小说版本是reportview图表中的分组,这在某种程度上导致所选数据"有时"不正确。。在过去的几年里,他们看起来很好,但有时情况并非如此。。

所以最终的结果是(我已经计划好了(在我的procs中添加了"日期不是null"等的检查。然而,用"using"语句包装命令对象等也没有坏处!非常感谢所有的回复!

相关内容

最新更新