我正在使用
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 参数化空字符串
您正在使用构造函数来设置值,而它期望的值为
MySqlDBType
。
试试这个:
MySqlParameter DBParam1 = new MySqlParameter("@var_Name", MySqlDBType.VarChar)
DBParam1.Value = (object)(string.IsNullOrEmpty(Name) ? DBNull.Value : Name;
将
DBNull.Value
传递给 NVARCHAR
类型将引发异常
“ErrorMessage”:“遇到未处理的类型”
所以我将其作为空字符串传递。
MySqlParameter DBParam1 = new MySqlParameter("var_Name", (object)(string.IsNullOrEmpty(Name)? string.Empty : Name));
如果您知道可为空的参数始终是字符串类型,那么您可以使用下面的代码。使用这个你不必用空白(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”。对于所有非空值,它将设置值并且不需要显式设置类型。这段代码对我有用,希望能有所帮助。