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-参数具有以下值:

那么 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。