SqlDataAdapter.Fill никогда не заканчивается, когда я использую параметры - PullRequest
0 голосов
/ 21 марта 2019

У меня проблема при использовании параметров в запросе выбора.

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)»

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я разобрался, есть два варианта, 1. Перекомпилируйте представление 2. Добавьте в конце запроса «Option (Recompile)»

0 голосов
/ 21 марта 2019

Так что я не уверен, почему это не работает для вас. Вот простой пример ниже, который я знаю, работает.

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);
...