SqlDataAdapter.Заполнение никогда не заканчивается, когда я использую параметры

#parameters #timeout #fill #sqldataadapter

#параметры #тайм-аут #заполнение #sqldataadapter

Вопрос:

У меня проблема, когда я использую параметры в запросе выбора.

 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
  

но когда я запускаю его без параметров, i работает идеально, для ответа требуется всего 1 секунда.

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

Есть идеи?

Я могу добавить, что таблица является представлением.

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

Ответ №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. Добавить в конце запроса «Параметр (перекомпилировать)»