У меня проблема в приложении c # при выполнении командного текста на ms-sql-сервере.Вот функция, которую я использую:
public T ExecuteScalar<T>(string commandText, IDbDataParameter[] parameters)
{
T result_value = default(T);
using (var connection = this.CreateConnection())
{
connection.Open();
using (var transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
{
using (var command = connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandText = commandText;
command.CommandTimeout = this.CommandTimeOut;
if (parameters != null)
{
foreach (var parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
object result = command.ExecuteScalar(); //Error is thrown here!
if (result is DBNull || result == null)
{
result_value = default(T);
}
else
{
Type type = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
if (type.IsEnum)
{
if (Enum.IsDefined(type, Int32.Parse(result.ToString())))
{
result_value =(T)Enum.Parse(type, result.ToString());
}
}
else
{
result_value = (T)Convert.ChangeType(result, type);
}
}
}
transaction.Commit();
}
}
return result_value;
}
Текст команды выглядит следующим образом:
"insert into tbl_Person (Vorname,Nachname,Strasse,HausNr,PLZ,Ort) output inserted.id values (@Vorname,@Nachname,@Strasse,@HausNr,@PLZ,@Ort)"
Проверка свойств-параметров моего состояния объекта commandtext-object,что HausNr -параметр имеет следующие значения:
- db-type : строка
- sql-db-type: NVarChar
- sql-значение : {13/5}
- значение : "13/5"
То есть параметр HausNr должен быть строкой, верно?Но при выполнении команды выдается следующая ошибка:
"Fehler beim Konvertieren des nvarchar-Werts \" 15/3 \ "в den int-Datentyp."
Failedпреобразовать значение nvarchar \ "15/3 \" в тип данных int
Похоже, он пытается преобразовать значение параметра HausNr в целое число-значение.Почему это происходит?