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