Параметр 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
соответственно.