C# 如何将日期从SQL Server获取到Oracle 12c?日期正在倒转(向后)

C# 如何将日期从SQL Server获取到Oracle 12c?日期正在倒转(向后),c#,.net,sql-server,oracle,date,C#,.net,Sql Server,Oracle,Date,我在将日期从SQL Server导入Oracle时遇到了一个真正的问题,同时保持了正确的值 SQL Server中的值如下所示:“1969年4月28日12:00AM” 当我将此值拉入.NET日期时间时,它看起来像:“04/28/1969 12:00AM” 当它被插入Oracle时,它看起来像:“19年4月28日” 快速查看Oracle日期看起来是正确的,但是如果我对字符(日期,'MM/DD/YYYY')进行操作,我会得到“04/28/6919”这对我们来说也是一个问题,无法解决它 虽然我们已经找

我在将日期从
SQL Server
导入
Oracle
时遇到了一个真正的问题,同时保持了正确的值

SQL Server中的值如下所示:
“1969年4月28日12:00AM”
当我将此值拉入
.NET
日期时间时,它看起来像:
“04/28/1969 12:00AM”
当它被插入Oracle时,它看起来像:“19年4月28日”


快速查看Oracle日期看起来是正确的,但是如果我对字符(日期,'MM/DD/YYYY')进行
操作,我会得到“
04/28/6919
”这对我们来说也是一个问题,无法解决它

虽然我们已经找到了解决办法,但它并不漂亮,但很有效。而且不是一个巨大的时间消费者。 我们将复制关闭,并在成功后更新日期类型列。更新不应该花费太长时间,因为这是一个批量操作

希望这有帮助。干杯

//EF 5.0.0.
private tables entities = new Tables();
private string validFrom; //try with date as well, should work
private int id;
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(applicationContext.GetConnection(CrmContext.ConnectionEnum.CrmDatabase)))
{
            bulkCopy.DestinationTableName = "TABLE";
            bulkCopy.BulkCopyTimeout = 180;
            bulkCopy.WriteToServer(dataTable);
            bulkCopy.Close();
}
//this is a workaroud due to error in Oracle DataAccess Driver
//look at the
entities.Database.ExecuteSqlCommand("UPDATE TABLE SET DATE_FROM = TO_DATE(:p0,'DD.MM.YYYY.') WHERE ID = :p1", validFrom, id);
entities.SaveChanges();

请显示要插入oracle的代码!以及从sql获取该日期的代码。请记住,您始终可以使用以下方法:理想情况下,不要使用字符串表示法。获取作为日期时间,插入作为日期时间…乔恩-这就是我最初所做的。字符串获取是我试图对格式进行更多控制的尝试。我会尽快发布我的代码。。。但真的没什么可看的。这很简单。也许很难做到,但这可能是endian差异吗?有没有简单的方法来确保你只更新刚刚插入的记录?我计划很快尝试一下-谢谢!
SET NOCOUNT ON 

BEGIN 
    BEGIN TRY 
          SELECT   DISTINCT                  
              IT.INSURANCE_COMPANY_CODE             INS_COMPANY_NUM
            , IP.POLICY_NUMBER                          INS_POLICY_NUM              
            , PH.FIRST_NAME                             PH_FIRST_NAME
            , PH.MIDDLE_NAME                            PH_MIDDLE_NAME
            , PH.LAST_NAME                              PH_LAST_NAME
            , LEFT(PH.NAME_SUFFIX,1)                    PH_NAME_SUFFIX
            , PH.ADDRESS                                PH_ADDRESS
            , PH.CITY                                   PH_CITY  
            , PH.STATE                                  PH_STATE  
            , PH.ZIPCODE                                PH_ZIP_CODE
            , CONVERT(VARCHAR, PH.DOB, 100)             PH_DATE_OF_BIRTH
            , PH.GENDER                                 PH_GENDER
            , PH.FL_DLN                                 INS_DL_NUMBER               
            , PH.FED_TIN                                INS_FEID
            , PH.FL_DLN_CROSS_REF                       FL_DLN_CROSS_REF
            , PH.FL_DLN_GENERATED                       FL_DLN_GENERATED
            , PH.NON_STRUCTURED_NAME                    PH_NON_STRUCT_NAME  
            , PH.EFFECTIVE_DATE                         EFFECTIVE_DATE      
            , ( CASE PH.COMPANY_INDICATOR 
                WHEN 'Y' THEN 'F'                                   
                WHEN 'N' THEN 'T'
                ELSE 'T'
                END )                                   PERSONAL_FLAG           
            --, CONVERT(VARCHAR(12),IP.UPDATE_TS,110)       INSERT_TIMESTAMP    
            , IP.CREATED_TS                             INSERT_TIMESTAMP    
            , IDENTITY(INT,1,1) AS                      ROWNUM
            , ph.CUSTOMER_NUMBER                        CUSTOMER_NUMBER


             INTO
                          #UPLOAD_POLICY_HOLDER

            FROM INSURANCE_TRANSACTION IT
                INNER JOIN INSURANCE_COMPANIES IC ON IC.INSURANCE_COMPANY_ID = IT.INSURANCE_COMPANY_ID
                INNER JOIN INSURANCE_POLICY IP ON IT.INSURANCE_POLICY_ID = IP.INSURANCE_POLICY_ID
                INNER JOIN POLICY_HOLDER PH ON IP.INSURANCE_POLICY_ID = PH.INSURANCE_POLICY_ID              
            WHERE IT.INSURANCE_COMPANY_CODE     = @INSURANCE_COMPANY_CODE
                AND IT.INSURANCE_FILE_UPLOAD_LOG_ID  =  @INSURANCE_FILE_UPLOAD_LOG_ID
                AND IT.HAS_ERROR = 0 
                AND PH.HAS_ERROR = 0
                AND ((LEFT(REPLACE(CONVERT(VARCHAR(10), DOB, 101), '/', ''), 4) = '0229' AND @GET_LEAP_YEARS = 1)
                    OR (LEFT(REPLACE(CONVERT(VARCHAR(10), DOB, 101), '/', ''), 4) <> '0229' AND @GET_LEAP_YEARS = 0))
            ORDER BY  IT.INSURANCE_COMPANY_CODE , IP.POLICY_NUMBER  ;

             SELECT * FROM #UPLOAD_POLICY_HOLDER 
                    WHERE ROWNUM > @START_ROW_NUM AND ROWNUM <= @END_ROW_NUM 
                    ORDER BY ROWNUM;

                    IF EXISTS
                    (
                    SELECT *
                    FROM tempdb.dbo.sysobjects
                    WHERE ID = OBJECT_ID(N'tempdb..#UPLOAD_POLICY_HOLDER')
                    )
                    BEGIN
                          DROP TABLE #UPLOAD_POLICY_HOLDER
                    END


    END TRY 

    BEGIN CATCH 
        IF @@TRANCOUNT > 0 
            ROLLBACK TRANSACTION 

            SET @ERROR_NUMBER = ERROR_NUMBER() 
            SET @ERROR_SEVERITY = ERROR_SEVERITY() 
            SET @ERROR_STATE = ERROR_STATE() 
            SET @ERROR_PROCEDURE = ERROR_PROCEDURE() 
            SET @ERROR_LINE = ERROR_LINE() 
            SET @ERROR_MESSAGE = ERROR_MESSAGE() 

            EXEC P_INSERT_SQL_ERROR @ERROR_NUMBER, @ERROR_SEVERITY, @ERROR_STATE, @ERROR_PROCEDURE, @ERROR_LINE, @ERROR_MESSAGE 
    END CATCH 

END 
            foreach (var colmapping in ColumnMappings)
            {
                var split = colmapping.Split(new[] { ',' });
                bc.ColumnMappings.Add(split.First(), split.Last());
            }

            bc.BulkCopyTimeout = 20000;
            bc.BatchSize = GetOracleBulkCountFromConfig();
            bc.NotifyAfter = GetOracleBulkCountFromConfig();
            bc.OracleRowsCopied += new OracleRowsCopiedEventHandler(bulkCopy_OracleRowsCopied);
            bc.WriteToServer(dt);
            bc.Close();
            bc.Dispose();
            dt.Clear();
        }
    }
//EF 5.0.0.
private tables entities = new Tables();
private string validFrom; //try with date as well, should work
private int id;
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(applicationContext.GetConnection(CrmContext.ConnectionEnum.CrmDatabase)))
{
            bulkCopy.DestinationTableName = "TABLE";
            bulkCopy.BulkCopyTimeout = 180;
            bulkCopy.WriteToServer(dataTable);
            bulkCopy.Close();
}
//this is a workaroud due to error in Oracle DataAccess Driver
//look at the
entities.Database.ExecuteSqlCommand("UPDATE TABLE SET DATE_FROM = TO_DATE(:p0,'DD.MM.YYYY.') WHERE ID = :p1", validFrom, id);
entities.SaveChanges();