Параметр Add Causing Timeout в DBCommand

У меня есть функция добавления параметров, как показано ниже:

public static void AddParameter(DbCommand comm, string ParamName, Object objValue, DbType Paramtype,int paramSize)
{
      //comm.Parameters.Clear();
      DbParameter param = comm.CreateParameter();
      param.ParameterName = ParamName;
      param.DbType = Paramtype;
      param.Size = paramSize;
      param.Direction = ParameterDirection.Input;
      param.Value = objValue;
      comm.Parameters.Add(param);
}

Теперь, когда сделать следующее:

conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM tableName WHERE MemberID=@MemberID";
AddParameter(cmd, "@MemberID", "00000970-b1fd-49ad-89fc-1de066c0076c", DbType.String, 50);
cmd.ExecuteReader();

Я получаю исключение тайм-аута. Но если я запускаю ту же команду

SELECT * FROM tableName WHERE MemberID='00000970-b1fd-49ad-89fc-1de066c0076c'

Я получаю желаемый результат... Кто-нибудь может мне помочь выяснить, где моя проблема? conn здесь SqlConnection. Благодарю.

1 ответ

Решение

Вы утверждаете, что столбец varchar(50), но вы используете DbType.String; тем не мение, DbType.String является nvarchar(...) то есть юникод. Теперь, иногда сервер будет выполнять преобразование "правильным путем" (где "правильный" здесь означает: тот, который не снижает производительность), но иногда он делает альтернативный выбор (например, он может решить, что не может использовать индекс и выполнять сканирование таблицы, или даже хуже - он может решить преобразовать каждую строку по очереди для сравнения). Поэтому лучше всего сначала указать правильный тип данных: используя DbType.AnsiString, Там нет ничего "не так" DbType.String или же DbType.AnsiString - до тех пор, пока они правильно используются для представления nvarchar а также varchar соответственно.

Другие вопросы по тегам