2013-05-22 5 views
0

Я был счастлив кодировать мое приложение, и я столкнулся с этой проблемой, которая меня немного пугала.C# OdbcDataReader или DataTable.Load column name issue

У меня есть файл SQLite db, и когда я пытаюсь прочитать таблицу с помощью OdcbDataReader и загружать ее в таблицу с помощью DataTable.Load, я получаю разные результаты по имени столбца в зависимости от приложения, над которым я работаю.

Иногда он возвращает имя_таблицы.column_name и иногда возвращает только column_name.

Код только это:

public DataTable GetTable(string table_name) 
    { 
     table = null; 
     if (conn_str != null) 
     { 
      try 
      { 
       using (OdbcConnection conn = new OdbcConnection(conn_str.ToString())) 
       { 

        StringBuilder query = new StringBuilder(); 

        query.Append("SELECT * "); 
        query.Append("FROM ["); 
        query.Append(table_name + "]"); 

        using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn)) 
        { 
         conn.Open(); 
         table = new DataTable(); 
         using (OdbcDataReader dr = cmd.ExecuteReader()) 
         { 
          DataSet ds = new DataSet(); 
          ds.EnforceConstraints = false; 
          ds.Tables.Add(table); 
          table.Load(dr); 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Debug.Print(ex.Message); 
       table = null; 
      } 
     } 
     return table; 
    } 

Строка соединения используется точно такая же:

"Driver = {SQLite3 Драйвер ODBC}; БАЗА ДАННЫХ = databesename.db3;"

Любые идеи, почему это происходит?

ответ

0

Не разрешайте проблему, но по крайней мере дает обходной путь.

Добавление имени замены в столбец для удаления table_name, если Reader вставляет его.

foreach (DataColumn col in table.Columns) 
{ 
    //Fix column names if the Reader insert the table name into the ColumnName 
    col.ColumnName = col.ColumnName.Replace(table_name + ".", ""); 
} 

код После изменения:

public DataTable GetTable(string table_name) 
{ 
    table = null; 
    if (conn_str != null) 
    { 
     try 
     { 
      using (OdbcConnection conn = new OdbcConnection(conn_str.ToString())) 
      { 
       StringBuilder query = new StringBuilder(); 

       query.Append("SELECT * "); 
       query.Append("FROM ["); 
       query.Append(table_name + "]"); 

       using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn)) 
       { 
        conn.Open(); 
        table = new DataTable(); 
        using (OdbcDataReader dr = cmd.ExecuteReader()) 
        { 
         DataSet ds = new DataSet(); 
         ds.EnforceConstraints = false; 
         ds.Tables.Add(table); 
         table.Load(dr); 
         foreach (DataColumn col in table.Columns) 
         { 
          //Fix column names if the Reader insert the table name into the ColumnName 
          col.ColumnName = col.ColumnName.Replace(table_name + ".", ""); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.Print(ex.Message); 
      table = null; 
     } 
    } 
    return table; 
}