C# 非托管ODP.NET-将Guid复制到原始(16)
我正在尝试使用OracleBulkCopy将CSV文件中的数据插入Oracle DB 表架构:C# 非托管ODP.NET-将Guid复制到原始(16),c#,database,oracle,plsql,guid,C#,Database,Oracle,Plsql,Guid,我正在尝试使用OracleBulkCopy将CSV文件中的数据插入Oracle DB 表架构: CREATE TABLE CodeDictionary ( Id RAW(16) default SYS_GUID(), Code varchar2(100) NULL, Description varchar2(300) NULL, Domain
CREATE TABLE CodeDictionary
(
Id RAW(16) default SYS_GUID(),
Code varchar2(100) NULL,
Description varchar2(300) NULL,
Domain varchar2(100) NOT NULL,
constraint PK_CodeDictionary PRIMARY KEY (Id)
) GO
我无法使用BulkCopy将.Net Guid作为原始(16)插入
这是一段代码:
var dataTable = new DataTable(_tableName);
// csvMapping(dataTable);
dataTable.Columns.Add("Id", typeof(byte[]));
dataTable.Columns.Add("Description", typeof(string));
dataTable.Columns.Add("Code", typeof(string));
dataTable.Columns.Add("Domain", typeof(string));
using (var oracleConnection = new OracleConnection(_connectionString))
{
oracleConnection.Open();
// Create the bulk copy object
var oracleBulkCopy = new OracleBulkCopy(oracleConnection, OracleBulkCopyOptions.UseInternalTransaction)
{
DestinationTableName = _tableName,
BatchSize = _batchsize,
BulkCopyTimeout = _oracleTimeOut
};
oracleBulkCopy.ColumnMappings.Add("Id", "Id");
oracleBulkCopy.ColumnMappings.Add("Description", "Description");
oracleBulkCopy.ColumnMappings.Add("Code", "Code");
oracleBulkCopy.ColumnMappings.Add("Domain", "Domain");
// WHILE (!textFieldParser.EndOfStream)
// Read CSV and Map data HERE.....
dataTable.Rows.Add(formatRow);
// **formatRow** is object[]
// The first element of formatRow is 'Id' and is a byte[] generated in that way:
// var guid = Guid.Parse("GUID_READ_FROM_CSV")
// guid.ToByteArray();
// END WHILE
oracleBulkCopy.WriteToServer(dataTable);
oracleConnection.Close();
}
此代码给了我此异常:ORA-00600:内部错误代码、参数:[kpudpxp_isSid-2]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[] 我已经尝试过创建没有RAW(16)和BulkCopy的表,所以我认为问题在于Guid->byte[]->RAW(16) 我也尝试过使用OracleBinary类型,但没有成功 有人知道如何解决这个问题吗? 也许有人已经使用过这个OracleBulkCopy好几次了。
对我来说,这是我第一次使用Oracle PL/SQL。有趣的是,我在很多年前就遇到了这个问题,我真诚地希望Oracle能够解决它。显然不是。映射存在一些问题,但如果大小约束大于16字节,则可以正常工作。因此,如果您可以将ID列重新定义为RAW(17),那么您的代码将正常工作。