Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非托管ODP.NET-将Guid复制到原始(16)_C#_Database_Oracle_Plsql_Guid - Fatal编程技术网

C# 非托管ODP.NET-将Guid复制到原始(16)

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

我正在尝试使用OracleBulkCopy将CSV文件中的数据插入Oracle DB

表架构:

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),那么您的代码将正常工作。