2

c# を使用して大きな Excel ファイルを mysql にインポートするにはどうすればよいですか? 私のコーディング経験はあまり良くないので、始めるにあたって大まかなアイデアを教えてくれる人がいたらと思っていました。これまでのところ、次のコードを使用して Excel ファイルを datagridview に読み込むことができました。

string PathConn = " Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + pathTextBox.Text + ";Extended Properties =\"Excel 8.0;HDR=Yes;\";";
OleDbConnection conn = new OleDbConnection(PathConn);
conn.Open();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + loadTextBox.Text + "$]", conn);
table = new DataTable();             

myDataAdapter.Fill(table);    

しかしその後、情報を抽出してmysqlデータベースに保存する方法がわかりません。以前に作成した空のスキームがあると仮定すると、Excel ファイルを mysql にアップロードするにはどうすればよいですか? ありがとう。

4

3 に答える 3

0

次に、データテーブル内のアイテムをループして、それらを使用して何かを行う必要があると思います(おそらくDBへの挿入ステートメント)

そのようです

foreach(DataRow dr in table.Rows)
{
    string s = dr[0].ToString() // this will be the first column in the datatabl as they are zero indexed
}
于 2013-10-02T09:35:50.490 に答える
0

これは、ある SQL Server から別の SQL Server へ、または DataFiles から SQL へのデータ移行シナリオで私が行うことです。

  1. 宛先 SQL Server に新しいテーブルを作成します (列名、主キーなど)。
  2. 既存のデータを DataTable にロードします (これは既に行ったことです)
  3. 次に、DataAdapter を使用して新しいテーブルを別の DataTable にクエリします (SQL テーブルをクエリすること以外は、Excel ファイルで行ったのと同じです)。
  4. DataTable メソッド「Load()」を使用して、OldData を「table」から「newTable」にロードします。
string PathConn = (MYSQL Connection String goes here)
OleDbConnection conn = new OleDbConnection(PathConn);
conn.Open();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + loadTextBox.Text + "$]", conn);
newTable = new DataTable();             

myDataAdapter.Fill(newTable); 

Now use the Load() Method on the new table:

newTable.Load(table.CreateDataReader(), <Specify LoadOption here>)

一致する列が新しい DataTable にインポートされます。(選択ステートメントでエイリアスを使用することで、マッピングを確実にすることができます)

既存のデータを新しいテーブルにロードした後、DataAdapter を使用して変更をデータベースに書き戻すことができます。

データを書き戻す例: ConnString - DB の接続文字列、SelectStmt (前に空のテーブルで行ったのと同じものを使用できます)、newTable を dtToWrite として提供します。

public static void writeDataTableToServer(string ConnString, string selectStmt, DataTable dtToWrite)
    {
        using (OdbcConnection odbcConn = new OdbcConnection(ConnString))
        {
            odbcConn.Open();

            using (OdbcTransaction trans = odbcConn.BeginTransaction())
            {
                using (OdbcDataAdapter daTmp = new OdbcDataAdapter(selectStmt, ConnString))
                {
                    using (OdbcCommandBuilder cb = new OdbcCommandBuilder(daTmp))
                    {

                        try
                        {
                            cb.ConflictOption = ConflictOption.OverwriteChanges;
                            daTmp.UpdateBatchSize = 5000;
                            daTmp.SelectCommand.Transaction = trans;
                            daTmp.SelectCommand.CommandTimeout = 120;
                            daTmp.InsertCommand = cb.GetInsertCommand();
                            daTmp.InsertCommand.Transaction = trans;
                            daTmp.InsertCommand.CommandTimeout = 120;
                            daTmp.UpdateCommand = cb.GetUpdateCommand();
                            daTmp.UpdateCommand.Transaction = trans;
                            daTmp.UpdateCommand.CommandTimeout = 120;
                            daTmp.DeleteCommand = cb.GetDeleteCommand();
                            daTmp.DeleteCommand.Transaction = trans;
                            daTmp.DeleteCommand.CommandTimeout = 120;
                            daTmp.Update(dtToWrite);
                            trans.Commit();
                        }
                        catch (OdbcException ex)
                        {
                            trans.Rollback();
                            throw ex;
                        }

                    }
                }
            }
            odbcConn.Close();
        }
    }

お役に立てれば。

newTable の主キーが必要です。そうしないと、CommandBuilder 例外が発生する可能性があります。

ブラジル

セラク

于 2013-10-02T09:42:40.157 に答える
0

途中で、Excel スプレッドシートから情報を取得し、それをDataTableに格納しました。

大量のデータを SQL にインポートする前に最初に行う必要があるのは、スプレッドシートから読み取った内容を検証することです。

いくつかのオプションがあります。そのうちの 1 つは、データを読み込む方法と非常によく似た方法で、SQLAdapterを使用して SQL データベースにINSERTを実行することです。この場合、本当に必要なことは、新しい接続を作成してINSERTコマンドを記述することだけです。

ここでこれを行う多くの例があります。

私が使用する別のオプションは、LINQ to CSV ( http://linqtocsv.codeplex.com/ ) です。

これにより、すべてのデータをクラスオブジェクトにロードできるため、INSERT into SQLを実行する前に各オブジェクトを簡単に検証できます。

経験が限られている場合は、SQLAdapter を使用して DB に接続してください。

幸運を

于 2013-10-02T09:50:32.470 に答える