当我使用参数时,SqlDataAdapter.Fill 永远不会结束

Posted

技术标签:

【中文标题】当我使用参数时,SqlDataAdapter.Fill 永远不会结束【英文标题】:SqlDataAdapter.Fill never ends when I use parameters 【发布时间】:2019-03-20 22:18:41 【问题描述】:

我在选择查询中使用参数时遇到问题。

sqlCommand cmd = new SqlCommand(con);
cmd.commandText = "SELECT TOP 1 * FROM tbl WHERE SN=@SN"

cmd.Parameters.Add(new SqlParamter("@SN", "N900"));
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);  // TIMES OUT

但是当我在没有参数的情况下运行它时,我可以完美运行,只需 1 秒即可响应。

cmd.commandText = "SELECT TOP 1 * FROM tbl WHERE SN='N900'"

有什么想法吗?

我可以添加表格是一个视图。

我想通了,有两种选择, 1.重新编译视图 2.在查询末尾添加“Option(Recompile)”

【问题讨论】:

【参考方案1】:

所以我不确定为什么它不适合你。下面是一个我知道有效的简单示例。

var sqlCommand = new SqlCommand();
sqlCommand.Connection = new SqlConnection("<YOUR_CONNECTION_STRING>");

sqlCommand.CommandText = @"SELECT * FROM (SELECT 'N900' as SN
                            UNION 
                            SELECT 'N901') AS A
                            WHERE A.SN = @SN";

sqlCommand.Parameters.Add(new SqlParameter("@SN", "N900"));
var sqlDataAdapter = new SqlDataAdapter(sqlCommand);

var dataTable = new DataTable();

sqlDataAdapter.Fill(dataTable);

【讨论】:

【参考方案2】:

我想通了,有两种选择, 1.重新编译视图 2.在查询末尾添加“Option(Recompile)”

【讨论】:

以上是关于当我使用参数时,SqlDataAdapter.Fill 永远不会结束的主要内容,如果未能解决你的问题,请参考以下文章

当我使用可变参数时,它适用于 int 和 double,但是当涉及到 float 时,会发生错误

为啥当我第二次使用完全相同的参数调用 IMMUTABLE 函数时,计划时间会加倍?

modx - 当我在同上片段中使用“&documents =”参数时,分页不起作用

当我使用 regasm 时,所有参数都输入为输入?那可以改变吗?

在 C# 中,当我使用该对象作为参数时,如何对该对象执行方法?

当我使用 Mock Service Worker 测试两个 get 请求时,为啥 req.url.searchParams 参数对象为空?