【发布时间】:2020-03-03 08:08:14
【问题描述】:
我有一个需要在 Oracle 中保存为 Blob 的公共类。我构建的 DataLayer 能够与 Oracle 或 MySQL 一起使用,因此 DBType 是添加参数的标准方法。现在的问题是,因为数据层被编写为不可知论者,所以我在创建参数时使用了 DBType。但是,当您在 oracle 中创建 blob 参数时,通常人们使用 OracleDBType。没有 DBType.blob。我尝试使用 DBType.object,但这给了我一个错误。
IDbCommand command = ProviderManager.factory.CreateCommand();
command.CommandText = commandText;
command.Connection = connection;
command.CommandType = commandType;
DbParameter dbParam = ProviderManager.factory.CreateParameter();
dbParam.ParameterName = "Summary";
dbParam.Value = batchSummary;
dbParam.Direction = parameterDirection;
dbParam.DbType = DbType.Object;
command.Parameters.Add(dbParam);
command.ExecuteNonQuery();
这是我收到的错误:
Oracle.ManagedDataAccess.Client.OracleException: '不支持的列数据类型'
【问题讨论】:
-
为什么要强迫自己序列化为 byte[]?有许多库能够以 XML、Json 和其他格式序列化任何内容(或多或少):看看JSon.Net:对于简单的场景(而不仅仅是简单的场景),它可以实现您的目标
-
如果你真的需要它是一个字节数组 - 使用一些确定性格式,如 protobuf