在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 -参数具有以下值:
所以 HausNr 参数应该是字符串,对吗?但是在执行命令时,会引发以下错误:
“ Fehler beim Konvertieren des nvarchar-Werts \” 15/3 \“在书房 int-Datentyp。”
无法将nvarchar值\“ 15/3 \”转换为int数据类型
看来他正在尝试将 HausNr -parameter-value转换为整数值。为什么会这样?
答案 0 :(得分:1)
该错误消息表明数据库驱动程序试图将您的字符串值转换为整数值。原因是HausNr列是数据库中的整数。
因此,请仔细检查您的数据库架构,并将HausNr更改为NVarChar。