SQLBulkCopy - WriteToServer 메서드가 작동하지 않습니다.

c# datatable sqlbulkcopy

문제

Excel 파일의 일부 데이터를 MDF 데이터베이스로 내보내려고합니다. 이렇게하려면 Excel 데이터 판독기 및 SQL 대량 복사를 사용하고 있습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Excel;
using System.Data;
using System.Diagnostics;
using System.Data.SqlClient;

namespace BulkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream fs = File.Open(@"C:\Users\maarab\Desktop\List_Personnel 2013.xlsx", FileMode.Open, FileAccess.Read);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fs);

            DataTable dt = CreateDataTable();

            string cx = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataTest.mdf;Integrated Security=True;User Instance=True";
            SqlBulkCopy bcp = new SqlBulkCopy(cx, SqlBulkCopyOptions.KeepIdentity);


            bool first = true;

            while (excelReader.Read())
            {
                if (first)
                {
                    first = false;
                }

                else
                {
                    if (String.IsNullOrWhiteSpace(excelReader.GetString(0)))
                        break;

                    else
                    {
                        string numNat = excelReader.GetString(2);
                        DateTime birthDate = excelReader.GetDateTime(9);
                        DateTime startDate = excelReader.GetDateTime(1);

                        if (!String.IsNullOrWhiteSpace(numNat))
                        {
                            if (numNat.Length == 12)
                            {
                                numNat = numNat.Remove(6, 1);
                            }
                        }

                        if (birthDate.Year < 1753)
                            birthDate = DateTime.Now;

                        if (startDate.Year < 1753)
                            startDate = DateTime.Now;

                        dt.Rows.Add(excelReader.GetString(0), excelReader.GetString(0), numNat, startDate, birthDate);

                    }
                }
            }

            bcp.DestinationTableName = "person";
            bcp.BatchSize = 100;

            bcp.ColumnMappings.Add(0, 1);
            bcp.ColumnMappings.Add(1, 2);
            bcp.ColumnMappings.Add(2, 3);
            bcp.ColumnMappings.Add(3, 4);
            bcp.ColumnMappings.Add(4, 5);

            try
            {
                bcp.WriteToServer(dt, DataRowState.Unchanged);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }


            Console.ReadLine();

        }


        public static DataTable CreateDataTable()
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("FirstName", typeof(string));
            dt.Columns.Add("LastName", typeof(string));
            dt.Columns.Add("NumNat", typeof(string));
            dt.Columns.Add("Birthdate", typeof(DateTime));
            dt.Columns.Add("StartDate", typeof(DateTime));

            return dt;
        }
    }
}

Excel 파일로 데이터 테이블을 채우고 있습니다. 프로그램은 아무 문제없이 실행되지만 불행히도 내 테이블에는 삽입되지 않습니다. 그걸 해결할 생각이야?

수락 된 답변

서버 탐색기를 사용하여 테이블을 보면이 창에서 사용 된 연결을주의 깊게 확인해야합니다. 프로젝트 파일에 데이터베이스 파일이 나열되고 서버 탐색기에서 사용하는 연결이 프로젝트 폴더의이 파일을 가리키는 경우가 자주 발생합니다.
물론 프로그램이 실행될 때 app.config에 지정된 연결이 사용됩니다.
이 시나리오에서는 오류가 없으므로 오류가 없지만 서버 탐색기를 사용하여 아무런 작업도 수행되지 않고 업데이트를 볼 수없는 잘못된 데이터베이스를 찾습니다.
해결책은 간단합니다. Data Explorer | DataDirectory | DataDirectory의 유효 값을 가리 키도록 서버 탐색기에서 사용하는 연결을 재구성해야합니다. 대체 문자열 (보통 프로젝트 유형에 따라 BIN \ DEBUG 또는 BIN)



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