首页 > 解决方案 > commandtext 参数在执行时更改类型

问题描述

在 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。"

无法将 nvarchar 值 \"15/3\" 转换为 int 数据类型

看起来他正在尝试将HausNr参数值转换为整数值。为什么会这样?

标签: c#sql-serverexecutescalar

解决方案


错误消息表明数据库驱动程序尝试将您的字符串值转换为整数值。原因是 HausNr 列是数据库中的整数。

因此,请仔细检查您的数据库架构并将 HausNr 更改为 NVarChar。


推荐阅读