5 Réponses :


2
votes

Vous pouvez utiliser n'importe lequel d'un certain nombre d'outils pour migrer des données à partir d'un fichier .csv vers une base de données, y compris:

  • SQL Workbench , à l'aide de wbcopy commande
  • un oul outil, comme Intégration de données Pentaho
  • ddlutils

    Remarque: la première et la troisième solution nécessite que vous accédez au fichier .csv via une interface JDBC.

    Tous ces éléments vous permettront de modifier le processus de migration dans une certaine mesure (par exemple, la taille du lot) et tous supposent que vous souhaitez effectuer la migration manuellement, plutôt que de l'exécution du code C # (qui compliquerait un peu les choses).


1 commentaires

Wbcopy est la mauvaise commande lors de l'utilisation de SQL Workbench WBIMPORT est destiné à être en vrac Chargement de fichiers texte Pas besoin de lire le fichier CSV via JDBC





-1
votes
public void LoadCheckFiletoDatabase(string checkFilePath)
        {
            DataTable tempTable = GetDataTableFromCsv(checkFilePath);

            foreach (DataRow DataR in this.memDataTable.Columns)
            {
                Dictionary<string, object> Dic = new Dictionary<string, object>();
                foreach (DataColumn DataCol in this.memDataTable.Columns)
                {
                    string field = DataCol.ColumnName.ToString();
                    object value = (string)DataR[DataCol].ToString();
                    Dic.Add(field, value);                   
                }
                using (SQLiteConnection sQLiteConnection = new SQLiteConnection("data source=" + databasepath))
                {

                     using (SQLiteCommand sQLiteCommand = new SQLiteCommand(sQLiteConnection))
                     {
                        System.Data.SQLite.SQLiteHelper sQLiteHelper = new SQLiteHelper(sQLiteCommand);
                        sQLiteHelper.BeginTransaction();
                        sQLiteHelper.Insert(tempTable.TableName, Dic);
                     }
                }    
            }
        public static DataTable GetDataTableFromCsv(string path)
        {
            string pathOnly = Path.GetDirectoryName(path);
            string fileName = Path.GetFileName(path);

            string sql = @"SELECT * FROM [" + fileName + "]";

            using(OleDbConnection connection = new OleDbConnection(
                      @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + 
                      ";Extended Properties=\"Text;HDR=" + "Yes" + "\""))
            using(OleDbCommand command = new OleDbCommand(sql, connection))
            using(OleDbDataAdapter adapter = new OleDbDataAdapter(command))
            {
                DataTable dataTable = new DataTable();
                dataTable.Locale = CultureInfo.CurrentCulture;
                adapter.Fill(dataTable);
                dataTable.TableName = fileName.TrimEnd(new char[] {'.','c','s','v'});
                return dataTable;
            }            
        }

1 commentaires

Les réponses du code seulement sont découragées. S'il vous plaît ajouter une explication. De plus, le code peut être formaté par plus de 4 espaces avant une ligne.



6
votes

Adressant la dernière partie de votre question:

Peut-être que quelqu'un sait la chose beaucoup plus simple: comment faire des inserts en vrac des fichiers CSV dans SQLite ...

donné Vous devez importer quelques-un milliards (ou un million de millions de million) dans SQLite à partir d'un fichier CSV,
Quand Il n'y a pas de support direct pour l'importation de données CSV via les commandes SELECT ou INSERT, et La ligne itérative de la ligne de lecture et d'insertion n'est pas performante < BR> alors une alternative pratique consiste à utiliser la commande "SQLite? .exe" et la commande d'importation via Shell Execute à partir de votre code C #.

loadcsvtosqlite.cs xxx

loadcsvtosqlite.bat xxx

loadcsv.sql xxx


0 commentaires