如何在 MySql 中以 Nvarchar 类型(过程参数)传递 DBNull

How to pass DBNull in Nvarchar type(procedure paramter) in MySql

我正在使用 MySQL c# 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":"Unhandled type encountered"

我该如何解决这个问题?

我调查了什么

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

您正在使用构造函数设置值,而它需要的值是 MySqlDBType

试试这个:

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

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

"ErrorMessage":"Unhandled type encountered"

所以我将其作为空字符串传递。

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

如果你知道可空参数总是字符串类型那么你可以使用下面的代码。使用它,您不必将 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 参数,您不必设置任何值 at-all 相反,它会将“IsNullable”设置为“true”并且需要将“MySqlDbType”设置为“VarChar” .对于所有非空值,它将设置值并且不需要显式设置类型。此代码对我有用,希望对您有所帮助。