当我使用参数时,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 永远不会结束的主要内容,如果未能解决你的问题,请参考以下文章