기본카테고리

[C#] Microsoft Office의 OleDb Provider 문자열을 구한다.

DevReff 2015. 8. 1. 01:09




728x90

  /// <summary>
  /// Microsoft Office의 OleDb Provider 문자열을 구한다.
  /// </summary>
  /// <returns>OleDb Provider 문자열</returns>
  /// <remarks>
  /// Office 2003 및 이하버전: Microsoft.Jet.OLEDB.4.0
  /// Office 2010 및 이하버전: Microsoft.ACE.OLEDB.12.0
  /// Office 2013 버전: Microsoft.ACE.OLEDB.15.0
  /// </remarks>
  public string GetOfficeOleDbConnectString()
  {
   string sFoundString = "";

   try
   {
    OleDbEnumerator enumerator = new OleDbEnumerator();
    DataTable table = enumerator.GetElements();
    List<string> aryProviders = new List<string>();
    foreach (DataRow row in table.Rows)
     aryProviders.Add(row[0].ToString());
    table.Dispose();
    aryProviders.Sort((p, n) => n.CompareTo(p));

    sFoundString = aryProviders.Find(m => m.StartsWith("Microsoft.ACE.OLEDB"));
    if (string.IsNullOrEmpty(sFoundString))
     sFoundString = aryProviders.Find(m => m.StartsWith("Microsoft.Jet.OLEDB"));
    return sFoundString;
   }
   catch(Exception ex)
   {
    System.Diagnostics.Trace.WriteLine(ex.Message);
   }

   sFoundString = "Provider=Microsoft.ACE.OLEDB.15.0";
   
   return sFoundString;
  }