【问题标题】:How to pass DBNull in Nvarchar type(procedure paramter) in MySql如何在 MySql 中以 Nvarchar 类型(过程参数)传递 DBNull
【发布时间】:2015-08-03 06:31:06
【问题描述】:

我正在使用MySQLc# 4

我的过程参数是NVARCHAR(100)

所以我正在做的是

MySqlParameter DBParam1 = new MySqlParameter("var_Name", (object)(string.IsNullOrEmpty(Name)? DBNull.Value : Name));

MySqlCommand _DBCommand = new MySqlCommand();
_DBCommand.Connection = _DBConnection;
_DBCommand.CommandText = "udsp_ProcedureName";
_DBCommand.CommandType = System.Data.CommandType.StoredProcedure;
_DBCommand.Parameters.Clear();
_DBCommand.Parameters.Add(DBParam1);

所以这是抛出“ErrorMessage”:“遇到未处理的类型”

我该如何解决这个问题?

我调查了什么

How do I Parameterize a null string with DBNull.Value clearly and quickly

Is there a more elegant form for assigning NULL to InsertCommand's NVarChar?

Exception when AddWithValue parameter is NULL

【问题讨论】:

  • new MySqlParameter("@var_Name",通知@

标签: c# mysql stored-procedures nvarchar dbnull


【解决方案1】:

如果您知道可为空的参数将始终是字符串类型,那么您可以使用以下代码。使用它,您不必将 null 替换为 blank(string.Empty)-

MySqlParameter pm = new MySqlParameter();
                        pm.ParameterName= "ParamName";
                        pm.Direction = System.Data.ParameterDirection.Input;
                        pm.IsNullable = true;
                        if(param.Value!=null)
                            pm.Value = param.Value;
                        else
                        {
                            pm.MySqlDbType = MySqlDbType.VarChar;
                        }

                        _DBCommand.Parameters.Add(pm);

请注意,对于可为空的 varchar 参数,您根本不必设置任何值,而是将“IsNullable”设置为“true”,并且需要将“MySqlDbType”设置为“VarChar”。对于所有非空值,它将设置值并且无需显式设置类型。此代码对我有用,希望对您有所帮助。

【讨论】:

    【解决方案2】:

    DBNull.Value 传递给NVARCHAR 类型会抛出异常

    "ErrorMessage":"遇到未处理的类型"

    所以我把它作为空字符串传递。

    MySqlParameter DBParam1 = new MySqlParameter("var_Name", (object)(string.IsNullOrEmpty(Name)? string.Empty : Name));
    

    【讨论】:

      【解决方案3】:

      您正在使用构造函数来设置值,而它需要一个值MySqlDBType

      试试这个:

      MySqlParameter DBParam1 = new MySqlParameter("@var_Name", MySqlType.VarChar)
      DBParam1.Value = (object)(string.IsNullOrEmpty(Name) ? DBNull.Value : Name;
      

      【讨论】:

        猜你喜欢
        • 2017-04-12
        • 1970-01-01
        • 2014-01-29
        • 2016-12-25
        • 2014-12-07
        • 2023-03-03
        • 2016-11-07
        • 1970-01-01
        相关资源
        最近更新 更多