我试图从.NET调用一个MySQL存储过程,它接受其中一个参数中的NULL值。我从下面构建我的参数列表,当我通过查看Visual Studio shows {}中的值来设置DBNull.Value时,我一直收到错误。我不确定为什么这是错误的,但是没有给出任何详细信息。
protected IEnumerable<MySqlParameter> BuildParameterList(IEnumerable<KeyValuePair<string, object>> parameters)
{
return parameters.Select(parameter => new MySqlParameter(parameter.Key, parameter.Value ?? DBNull.Value)
{
IsNullable = parameter.Value == null
});
}
答案 0 :(得分:0)
通过这样做来修复它。看起来MySQL不喜欢AnsiString,它是null的默认数据类型。
protected IEnumerable<MySqlParameter> BuildParameterList(IEnumerable<KeyValuePair<string, object>> parameters)
{
foreach (var parameter in parameters)
{
var mysqlParameter = new MySqlParameter(parameter.Key, parameter.Value ?? DBNull.Value)
{
IsNullable = parameter.Value == null
};
if(parameter.Value == null && mysqlParameter.DbType == DbType.AnsiString)
{
mysqlParameter.DbType = DbType.String;
}
yield return mysqlParameter;
}
}