SQL 대량 삽입의 날짜 시간 값

c# sql sqlbulkcopy sql-server

문제

SQL Server에 SqlBulkcopy로 C # 콘솔 응용 프로그램을 사용하고 날짜 시간 값을 가져 오는 동안 다음 예외를 수신하는 일부 Excel 파일을 가져 오려고합니다.

예외 :이 예외는 대량 복사를 수행 할 때 발생합니다. 여기서 하나 이상의 열에는 datetime 데이터 유형이 있습니다. 나는 그것이 아래에 날짜 형식과 관련이 있다고 생각한다. 오류의 세부 사항이다.

"데이터 소스의 String 유형의 지정된 값을 지정된 대상 열의 datetime 유형으로 변환 할 수 없습니다."

코드 스 니펫

  sExcelConnectionString  = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties=" + "\"Excel 12.0;HDR=No;IMEX=1;\"";
OleDbConnection OleDbConn = new OleDbConnection(sExcelConnectionString);
                    OleDbTransaction tran; 
                    OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn);
                    OleDbConn.Open();
                    OleDbDataReader dr = OleDbCmd.ExecuteReader();


                if (dr.HasRows && dr.FieldCount > 1)
                {
                     //DataTable dt = readReader(dr);
                    try
                    {

                        string sSqlConnectionString = connectionString.ToString();
                        string sClearSQL = "DELETE FROM " + sSQLTable;
                        SqlConnection SqlConn = new SqlConnection(sSqlConnectionString);
                        SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn);

                        SqlConn.Open();
                        //SqlCmd.ExecuteNonQuery();
                        SqlConn.Close();
                        SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString);
                        bulkCopy.DestinationTableName = sSQLTable;
                        bulkCopy.BulkCopyTimeout = 0;
                        while (dr.Read())
                        {

                            bulkCopy.WriteToServer(dr);
                            imported = true;

                        }
                        OleDbConn.Close();
                        if (valToField.ToString() != "")
                        {
                            sClearSQL = "DELETE FROM " + sSQLTable + " where " + valToField + "='" + valToRemove.ToString() + "'";
                            SqlCmd = new SqlCommand(sClearSQL, SqlConn);
                            SqlConn.Open();
                            SqlCmd.ExecuteNonQuery();
                        }
                        SqlConn.Close();

                    }
                    catch (Exception ex)
                    {

                        LogMessageToFile("Error While Inserting Data from : " + excelFilePath.ToString() + "  to table :  " + dbtable.ToString() + ex.Message.ToString());

                    }
                }

해결책을 제안하십시오.

감사

인기 답변

간단한 대답은 = TEXT (a1, "dd mmmm yyyy hh : mm : ss") 함수를 사용하여 Excel 날짜를 문자열로 변환하는 것입니다. 여기서 a1은 날짜가있는 셀에 대한 참조입니다.

그 달 동안 4 개의 m을주의하십시오; 완전한 월 이름을 사용하고 SQL 서버가 날짜 데이터 정렬 충돌을 대비하여 날짜 변환을 처리하게하는 것이 가장 좋습니다.

아래의 설명에 따라 문화 및 언어에 걸쳐 작동합니다. = TEXT (a1, "yyyy-MM-ddTHH : mm : ss")



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.