0

私は100個のExcelファイルを持っています。各ファイルで、そこから 1 行を SQL サーバーに挿入する必要があります。これを自動化する必要がありますが、最終的にはアプリのasp.netかExcelマクロかは気にしません。何かアイデアがありましたら、お知らせください。

問題 asp.net 4.0 コマンド ライン アプリ コードを記述したところ、次のエラーが表示されました。「Microsoft.Ace.OleDb.4.0」プロバイダーがローカル コンピューターに登録されていません。

Microsoft Access データベース エンジン 2010 再頒布可能パッケージ ( http://www.microsoft.com/en-us/download/details.aspx?id=13255 ) をインストールした後、ボックスにodbcドライバーがなくなりました。以前と同様に SQL ドライバーのみ。

私のボックスは x64 ですが、x86 オフィスがインストールされているため、x86 用の Microsoft Access データベース エンジン 2010 再頒布可能パッケージをインストールしました。

レジストリも確認しましたが、SQL サーバー ドライバー以外のドライバーは表示されません。

私はいくつかの記事を読みました:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/eeaa2d7b-fbfa-401b-8efe-9170f04059b0

'Microsoft.ACE.OLEDB.12.0' プロバイダーがローカル コンピューターに登録されていません

以下にコードを含めますが、ドライバーを入手するまで違いはないと思います-

public void ImportExcelFilesForPieChart()
{
    List<DataTable> listDataTables = new List<DataTable>();
    List<CompanyInfo> newlist = new List<CompanyInfo>();
    string sheetName = "Output";

    string[] fileList = Directory.GetFiles(dropBoxExcelLocation);
    foreach (string filename in fileList)
    {
        DataTable dt = new DataTable();
        string connectionString = string.Format("Provider=Microsoft.Ace.OleDb.4.0;data source={0};Extended Properties=Excel 8.0;HDR=No;IMEX=1", dropBoxExcelLocation + filename);
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            string strSQL = String.Format("SELECT 4A, 4B, 4C, 4D, 4E, 4F FROM [{0}$]", sheetName); //[A4:F4]";
            OleDbCommand objCmd = new OleDbCommand(strSQL, connection);
            connection.Open();

            using (OleDbDataAdapter da = new OleDbDataAdapter(strSQL, connection))
            {
                da.Fill(dt);
                listDataTables.Add(dt);
            } 
        }
    }
}
4

2 に答える 2

1

接続文字列が正しくありません。

プロバイダはMicrosoft.ACE.OLEDB.12.0

JET プロバイダーは 4.0 だと思います。事前にそれを試していましたか?

于 2012-08-15T15:17:14.957 に答える
0

私はいくつかのことをしたので、すべてのステップが重要かどうかはわかりません。

このkbの記事http://support.microsoft.com/kb/209805に従ってdllを登録しました。それらを登録する前に、レジストリにエントリがないことを確認しました。これにより、ISAMnotfound例外が発生しました。

次に、Dave Rのおかげで、接続文字列を変更しました。機能した最後の接続文字列は次のとおりです(拡張プロパティでエスケープされた引用符に注意してください)

string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;data source={0};Extended Properties=\"Excel 12.0 Xml;IMEX=1\"", filename);

ファイル拡張子(.xlsx)が接続文字列に関連していることに気づきませんでしたが、ここ(http://www.connectionstrings.com/excel-2007)の接続文字列情報を読んだ後、修正しました。

于 2012-08-15T16:15:54.563 に答える