2017-10-02 9 views
0

OledbDataAdapterを使用してExcelファイルからデータを読み込むため、複数の製品情報を一度にアップロードできます。私はそれが適切に動作するように多くの時間を費やし、最後には大丈夫です。OleDbDataAdapterでExcelファイルを読むと、特定の列がC#によって読み取られない可能性があります。

しかし、今日私は新しい列を追加しますが、これは他のすべてのデータを読み込みますが、上記の「Resim」というタイトルの列は読み込まれません。私はすべてを行い、列の位置を変更し、フォーマットを「番号」、「テキスト」、「スタンダート」に何度も変更しました。 しかし、この特定の列の読み込みを拒否する列のプロパティにかかわらず、常にテーブルに ""戻ります。誰でも助けることができますか?

string conString = string.Empty; 
    switch (extension) 
    { 
    case ".xls": //Excel 97-03. 
     conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
    break; 
    case ".xlsx": //Excel 07 and above. 
    conString = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; 
    break; 
    } 

DataTable dt = new DataTable(); 
conString = string.Format(conString, filePath); 

using (OleDbConnection connExcel = new OleDbConnection(conString)) 
{ 
    using (OleDbCommand cmdExcel = new OleDbCommand()) 
    { 
     using (OleDbDataAdapter odaExcel = new OleDbDataAdapter()) 
     { 
      using (maindb_denizlerEntities db = new maindb_denizlerEntities()) 
      { 
       cmdExcel.Connection = connExcel; 

       //Get the name of First Sheet. 
       connExcel.Open(); 
       DataTable dtExcelSchema; 
       dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       string sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
       connExcel.Close(); 

       //Read Data from First Sheet. 
       connExcel.Open(); 
       cmdExcel.CommandText = "SELECT * From [" + sheetName + "] "; 
       odaExcel.SelectCommand = cmdExcel; 
       odaExcel.Fill(dt); 
       Kategori_UrunBLL _katUrunler = new Kategori_UrunBLL(); 

       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        if (dt.Rows[i]["Adi"].ToString() == null || dt.Rows[i]["Adi"].ToString() == "") 
        { 
         dt.Rows[i].Delete(); 
        } 
       } 
       dt.AcceptChanges(); 
       int yeniRowCount = dt.Rows.Count; 

       for (int i = 0; i < yeniRowCount; i++) 
       { 
        var adi = dt.Rows[i]["Adi"].ToString(); 
        var adi_En = dt.Rows[i]["Adi_EN"].ToString(); 
        var aciklama = dt.Rows[i]["Aciklama"].ToString(); 
        var aciklama_En = dt.Rows[i]["Aciklama_EN"].ToString(); 
        var kisaOzet = dt.Rows[i]["Kisa_Ozet"].ToString(); 
        var kisaOzet_En = dt.Rows[i]["Kisa_Ozet_EN"].ToString(); 
        var etiketler = dt.Rows[i]["Etiketler"].ToString(); 
        var etiketler_En = dt.Rows[i]["Etiketler_EN"].ToString(); 
        var resim = dt.Rows[i]["Resim"].ToString(); 
        var fiyat = dt.Rows[i]["Fiyat"]; 
        var eskifiyat = dt.Rows[i]["EskiFiyat"]; 
        var durumu = dt.Rows[i]["Durum"]; 
        ...... 
        ...... 

enter image description here

enter image description here

+0

最初の質問ですが、適切なファイルをターゲットに設定していますか?第二に、これをデバッグするときに、dtオブジェクトを埋める前にSQLから戻ってくるもの –

+0

SQLはありません。 Excelファイルからすべてのデータを取得していますが、この「Resim」列以外はすべてOKです。私はテストし、デバッグし、他のすべては正しく動作しています –

+0

私はあなたの選択クエリ、つまりSQLとも呼ばれるあなたの構造化クエリ言語を意味すると言います。 –

答えて

0

OK、私は解決策を見つけました。それはコントローラにデータを渡すことではなく、Excelファイルから渡すのではなく、実際に私が(コピー貼り付けではなく)列を削除して、別のものを追加してもう一度塗りつぶすと機能します。それは私が何か間違ってセルのフォーマットを変更するようにも、私はまだ値を得ることができませんでしたデフォルトに戻しているようです。

同じエラーが発生した場合は、デフォルトのオプションを使用して列を保持することをお勧めします。私のように邪魔になる場合は、問題の列を削除してもう一度挿入し直してください。

関連する問題