SQLBulkCopy - WriteToServer-Methode funktioniert nicht

c# datatable sqlbulkcopy

Frage

Ich versuche, Daten aus einer Excel-Datei in eine MDF-Datenbank zu exportieren. Um dies zu tun, verwende ich Excel Data Reader und SQL Bulk Copy:

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;
        }
    }
}

Ich fülle eine Datentabelle mit meiner Excel-Datei und alles geht gut. Das Programm läuft ohne Probleme, aber unglücklicherweise gibt es keinen Eintrag in meinen Tisch. Irgendeine Idee, das zu lösen?

Akzeptierte Antwort

Wenn Sie den Server mit dem Server-Explorer betrachten, sollten Sie sorgfältig die in diesem Fenster verwendete Verbindung überprüfen. Es passiert sehr oft, dass Sie Ihre Datenbankdatei in den Projektdateien aufgelistet haben und die Verbindung, die von Server Explorer verwendet wird, auf diese Datei im Projektordner zeigt.
Wenn Ihr Programm ausgeführt wird, ist die verwendete Verbindung natürlich die in Ihrer app.config angegebene.
In diesem Szenario haben Sie keinen Fehler (weil kein Fehler vorliegt), aber Sie suchen mit dem Server Explorer nach der falschen Datenbank, wo keine Aktion aufgetreten ist und Sie die Aktualisierungen nicht sehen können.
Die Lösung ist einfach: Sie müssen die vom Server-Explorer verwendete Verbindung neu konfigurieren, um auf den effektiven Wert des | DataDirectory | zu zeigen Substitutionszeichenfolge (normalerweise BIN \ DEBUG oder BIN, abhängig vom Projekttyp)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum