如何在 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” .对于所有非空值,它将设置值并且不需要显式设置类型。此代码对我有用,希望对您有所帮助。
我正在使用 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” .对于所有非空值,它将设置值并且不需要显式设置类型。此代码对我有用,希望对您有所帮助。