2017-06-21 5 views
1

この質問には回答と投稿が12個ありますが、何も私には当てはまりません。'Microsoft.ace.oledb.12.0'はサーバー(IIS7)の.xlsxファイルからすべての行を読み取っていません

私はMVC4アプリケーションを持っており、IIS7に私のサーバーとVisual Studioがインストールされていないもう1台のマシンに展開しました。

バルク入力を行うために/からエクセルにインポート/エクスポートデータを実行しています。

Office 2007の.xlsx形式(ファイルはExcelワークブックとして保存)で1枚のデータに約20000のデータがあります。

次のコードを使用してデータを読み取ると、4000-5000行だけのデータが読み取られます。このコード全体以下

は、私は、コードを実行すると「.XLSのExcel 97-2003ワークブック」からすべての20000行のデータを読んで、私のローカルマシン で細かい作業が、.xlsxのでExcelワークブック」で作業していません"

private void FillDataSet(HttpPostedFileBase file, DataSet ds) 
{ 
    using (
    var con = 
     new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0")) 
    { 
     con.Open(); 
     var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     var strSheetName = ""; 
     strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();   
     var cmd = new OleDbCommand(); 
    var da = new OleDbDataAdapter(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT * FROM [" + strSheetName + "]"; 
    da = new OleDbDataAdapter(cmd); 
    da.Fill(ds);   
    } 
} 

私は以下の手順と解決策を完了しましたが、それは私にとっては効果がありません。

- Microsoft Access Database Engine 2010再配布可能ファイルのインストール。 2007 Office Systemのドライバ-Installing

:データ接続コンポーネントを

それは私のローカルマシン上で作業し、サーバー上で動作していない、なぜ私たちは混乱しています。 [プロパティ]をクリックします -fromソリューションエクスプローラのプロジェクトを右クリックします。

私が試してみました

何..この問題の任意のアイデアやソリューションを提供してください。 - [ビルド]タブをクリック -Change Platform target from:任意のCPUからx86 |任意のCPUからx64 - ソリューションの再ビルド - アドバンス設定でIISで32ビットアプリケーションを有効/無効に変更しました。

答えて

1

Excelからデータを読みながら、あなたがテキスト形式にすべてのデータを変換する必要があるいくつかの時間

OLD接続文字列

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0" 

更新接続文字列

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';" 

これはすべてのデータをテキスト形式に変換し、すべてのデータが表示されます。

更新されたコード

private void FillDataSet(HttpPostedFileBase file, DataSet ds) 
{ 
    using (
    var con = 
     new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';")) 
    { 
     con.Open(); 
     var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     var strSheetName = ""; 
     strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();   
     var cmd = new OleDbCommand(); 
    var da = new OleDbDataAdapter(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT * FROM [" + strSheetName + "]"; 
    da = new OleDbDataAdapter(cmd); 
    da.Fill(ds);   
    } 
} 
+0

更新のためのTanayありがとうございます。 しかし、それは私の問題を解決していません。 私はこのリンクによって与えられた接続を通過しましたが、いずれの場合も20000レコード全体を読み取ることはありません ちょうど.xlsx形式の4000-5000レコードを読み込んでいます https://www.connectionstrings.com/ace-oledb -12-0/ –

+0

これは正しくありません。 IMEX = 1は、プロバイダが混合された列をテキストとして扱い、すべてをテキストとして扱わないことを意味します。悲しいことに、プロバイダは最初の8行をスキャンして、列のデータ型を決定します。 IMEX = 1がなければ、それは決済されないデータ型に評価されなかったものすべてに対してNullを返します。とにかくテキストに評価されれば問題ではありませんが、数字であると考えると、テキストセルにNullが付きます。この場合、IMEX = 1は、列の最初の8つのセルにデータ型が混在している列のテキストを返します。 –

0

これを試してみてください。私もいくつかの問題がありました。

new OleDbConnection(@"Provider=Provider=Microsoft.Jet.OLEDB.4.0;Data Source;Data Source=" File Path";Extended Properties=\"Excel 8.0;HDR=Yes;\";)) 
+1

Jetプロバイダは廃止されており、これ以上は使用しないでください。 –

関連する問題