执行

时间:2018-10-02 08:44:38

标签: c# sql-server executescalar

在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 \“在书房   int-Datentyp。”

     

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

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

1 个答案:

答案 0 :(得分:1)

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

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

相关问题