1

我正在尝试从 .NET 调用 MySQL 存储过程,该过程在其中一个参数中接受 NULL 值。我从下面构建我的参数列表,当我通过查看 Visual Studio 中的值设置 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
                                                      });
        }
4

1 回答 1

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;
            }
        }
于 2012-05-03T18:01:05.340 回答