2015-10-04 32 views
11

Excelのテーブルに接続して処理するODBC接続に問題があります。私はすでにそれについてインターネット上で多くのものを読んだが、解決策のどれも(stackoverflowを含む)私を助けなかった。ODBCへのExcelへのエラーのエラー

基本的に私はテーブルに接続しようとしています。私はexcel.Open()メソッドを呼び出すと

private static SortedList<string, School> generateSchoolListExcel(string listFilePath) 
{ 
    StringBuilder con = new StringBuilder(); 

    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Data Source", listFilePath); 
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "HDR", "yes"); 
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Format", "xlsx"); 
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Driver", "{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"); 
    //I have tried to specify driver without parentheses {} but it's still the same 

    List<School> schoolList = new List<School>(); 

    using (OdbcConnection excel = new OdbcConnection(con.ToString())) 
    { 
     excel.Open(); 
     //doing actuall stuff 
    } 

     return schoolList; 
} 

は、私がメッセージをOdbcExceptionを取得:

ERROR [IM002] [Microsoft]の[ODBCドライバマネージャ]データソース名が見つからない とデフォルトのドライバーが指定されていません」 、私は 詐欺という名前の文字列で指定されているものを持っているので、これは奇妙である。

また、ODBCデータソースアドミニストレータであることを言及する価値があります、これらのドライバがインストールされ実行されていることがはっきりとわかります。

また別の奇妙な部分があります。私は次のメソッドを呼び出すと、私はそれがドライバーの次のリストに私を返すStackOverflowの上で見つかった:

  • 「ドライバのダマイクロソフトパラarquivos TEXTO(* .TXT; * .csv)に」
  • 「ドライバやりますMicrosoft Accessの(* .MDB)」
  • "ドライバやるマイクロソフトのdBase(* .DBF)"
  • "ドライバやるのMicrosoft Excel(*。xlsファイル)"
  • "ドライバやるマイクロソフトパラドックス(* .DB)"
  • "Microsoft Access Driver(* .md B) "
  • "のMicrosoft Access-Treiber(* .MDB)"
  • "マイクロソフトのdBaseドライバー(* .DBF)"
  • の "Microsoft dBaseの-Treiber(* .DBF)"
  • " Microsoft Excelのドライバー(* .XLS) "
  • "Microsoft Excelの-Treiber(* .XLS)Oracle用の"
  • の "Microsoft ODBC"
  • "マイクロソフトパラドックスドライバー(* .DB)"
  • の" Microsoft Paradox- Treiber(* .db) "
  • "Microsoft Text Driver(.txt; .csv)に」
  • の "Microsoftテキスト-Treiber(* .TXT; * .csv)に"
  • "SQL Serverの"
  • "SQL Serverのネイティブクライアント11.0"

なしのそれらは "* .xlsx"を持っています。これは私が読もうとしているファイルのフォーマットです。

方法は以下の通りです:

public static List<String> GetSystemDriverList() 
{ 
    List<string> names = new List<string>(); 
    // get system dsn's 
    Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software"); 
    if (reg != null) 
    { 
     reg = reg.OpenSubKey("ODBC"); 
     if (reg != null) 
     { 
      reg = reg.OpenSubKey("ODBCINST.INI"); 
      if (reg != null) 
      { 

       reg = reg.OpenSubKey("ODBC Drivers"); 
       if (reg != null) 
       { 
        // Get all DSN entries defined in DSN_LOC_IN_REGISTRY. 
        foreach (string sName in reg.GetValueNames()) 
        { 
         names.Add(sName); 
        } 
       } 
       try 
       { 
        reg.Close(); 
       } 
       catch { /* ignore this exception if we couldn't close */ } 
      } 
     } 
    } 

    return names; 
} 

なお、私は実際にregeditに行き、私ははっきりと見るそれらの値を見つけるとき:

"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)". 

私は何かを明らかに足りませんの?私を助けてください:)

ところで、私は.NETのこの面でかなり新しいですので、実際に何が起こっているのかを実際に理解することができるように、あなたの答えはダムダウンしてください。ありがとうございました!

EDIT:

additional_info: 友人はregeditと、ODBCデータソースアドミニストレータとACEODBC.DLLは実際に私のハードドライブ上に存在することを証明のスクリーンショットであるので、ここで、私はより多くの情報を与えるべきで指摘

またcon.ToString()は、次のようになります:

Data Source="G:\POS\odabrane_skole novo_mod.xlsx";Driver="{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}" 
+3

私は本当に人々が自分自身を打つ理由を理解できません。 Excel –

+0

@ T.Sで作業するには、 'microsoft.ace.oledb'を使用してください。アイデアをありがとう。私はいつかそれを試してみるだろうが、なぜこれがうまくいかないのか不思議である。 – AbyPhantom

+0

@AbyPhantom:コメントの[ここ](http://stackoverflow.com/questions/31344178/saving-data-from-spss-to-excel-custom-sheet-name)で指摘されているように、 OfficeビットバージョンとあなたがExcelのファイルを変更するために使用しているアプリケーションとの互換性(これは自分自身でこのようなものになるので、これはあまり意味がないかもしれませんが、同じエラーがあります) –

答えて

1

あなたがダウンロードしてMicrosoft Access Database Engine 2010 Redistributableがインストールされていることを確認してください....

そして...にOleDbConnectionオブジェクトを使用する方法についてどのように

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\POS\odabrane_skole novo_mod.xlsx;Extended Properties="Excel 12.0;HDR=YES; IMEX=1;"; 
1

をあなたの接続文字列を変更し、あなたが最初にMicrosoft Accessデータベースエンジン2010をインストールする必要があります。

string path = @"c:\sample.xlsx"; 
string strCon = " Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source = " + path + ";Extended Properties='Excel 12.0;'"; 
OleDbConnection objConn = new OleDbConnection(strCon); 

string strCom = " SELECT * FROM [a$] "; 
objConn.Open(); 
1

あなたのアプリケーションはx86(32ビット)アプリケーションであり、64ビットODBCドライバを見ているようです。 32ビットODBCドライバがインストールされているか確認してください....

関連する問題