commandtext 参数在执行时改变类型
commandtext parameter changes type when executing
在 ms-sql-server 上执行命令文本时,我的 C# 应用程序出现问题。这是我使用的功能:
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)"
检查我的命令文本对象的参数-属性 表明,HausNr-参数具有以下值:
- 数据库类型: 字符串
- sql-db-type: NVarChar
- sql-值:{13/5}
- 值:“13/5”
那么 HausNr 参数应该是一个字符串吧?但是执行命令时,抛出如下错误:
"Fehler beim Konvertieren des nvarchar-Werts \"15/3\" in den
int-Datentyp."
Failed to convert the nvarchar-value \"15/3\" to the int-datatype
他似乎在尝试将 HausNr 参数值转换为整数值。为什么会这样?
错误消息说数据库驱动程序试图将您的字符串值转换为整数值。原因是列 HausNr 在您的数据库中是一个整数。
因此请仔细检查您的数据库架构并将 HausNr 更改为 NVarChar。
在 ms-sql-server 上执行命令文本时,我的 C# 应用程序出现问题。这是我使用的功能:
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)"
检查我的命令文本对象的参数-属性 表明,HausNr-参数具有以下值:
- 数据库类型: 字符串
- sql-db-type: NVarChar
- sql-值:{13/5}
- 值:“13/5”
那么 HausNr 参数应该是一个字符串吧?但是执行命令时,抛出如下错误:
"Fehler beim Konvertieren des nvarchar-Werts \"15/3\" in den int-Datentyp."
Failed to convert the nvarchar-value \"15/3\" to the int-datatype
他似乎在尝试将 HausNr 参数值转换为整数值。为什么会这样?
错误消息说数据库驱动程序试图将您的字符串值转换为整数值。原因是列 HausNr 在您的数据库中是一个整数。
因此请仔细检查您的数据库架构并将 HausNr 更改为 NVarChar。