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

问题描述 投票:0回答:3

我正在使用

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”:“遇到未处理的类型”

我该如何解决这个问题?

我调查了什么

如何清晰快速地使用 DBNull.Value 参数化空字符串

是否有更优雅的形式将 NULL 分配给 InsertCommand 的 NVarChar?

AddWithValue 参数为 NULL 时出现异常

c# mysql stored-procedures nvarchar dbnull
3个回答
2
投票

您正在使用构造函数来设置值,而它期望的值为

MySqlDBType

试试这个:

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

1
投票

DBNull.Value
传递给
NVARCHAR
类型将引发异常

“ErrorMessage”:“遇到未处理的类型”

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

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

0
投票

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

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);

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

© www.soinside.com 2019 - 2024. All rights reserved.