Definisci automaticamente il DataTable in C # dallo schema delle tabelle del server SQL?

c# datatable sqlbulkcopy sql-server

Domanda

Ho già alcune tabelle in SQL Server e sto scrivendo un programma C # per popolare le tabelle da alcuni file flat. Ho intenzione di usare SQLBulkCopy per caricare le tabelle.

Può essere molto lavoro definire tutte le colonne per ogni DataTable per SQLBulkCopy. È un modo semplice per generare questi DataTable in C # dalla definizione delle tabelle di SQL Server esistenti?


Non riesco a utilizzare Bulk insert o bcp perché i file flat sono in un layout diverso e devono essere analizzati da un codice C # prima di inserirlo.

Risposta accettata

Se si desidera l'approccio forza bruta, è possibile utilizzare il seguente per ogni tabella:

    DataTable dt = new DataTable();
    using (SqlConnection conn = new SqlConnection("Some SQLConnectionString")) {
        conn.Open();
        using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT TOP 0 * FROM SomeTable", conn))
        {
            adapter.Fill(dt);
        };
    };

SELECT TOP 0 restituirà solo la struttura della tabella senza record.


Risposta popolare

Se stai cercando un modo rapido per caricare file flat in SQL, potresti usare BULK INSERT. Basta specificare un delimitatore e finché le colonne dei file sono disposte nello stesso ordine della tabella del database, tutto viene automaticamente mappato. È necessaria qualche autorizzazione aggiuntiva per eseguire inserimenti di massa, ma dalla mia esperienza, è il modo più rapido ed efficiente per gestire il processo.

BULK INSERT Database.dbo.Table
FROM 'C:\inetpub\website\file.csv'
WITH (FIELDTERMINATOR = ',')


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché