/// <summary>
 /// 获取表在数据库中定义的字段
 /// </summary>
 /// <param name="tableName"></param>
 /// <param name="connectionStringName"></param>
 /// <returns></returns>
 public static Tuple<string, Type>[] GetDatabaseColumns(string tableName, string connectionStringName)
 {
     if (tableName == null)
     {
         throw new ArgumentNullException("tableName");
     }
     var cache = _dataBaseColumnsCache.Get(new Tuple<string, string>(tableName, connectionStringName), () =>
     {
         var context = new DbQuery(connectionStringName);
         var connection = context.GetConnection();
         var cmd = connection.CreateCommand();
         cmd.CommandText = context.Provider.GetSelectColumnsSQL(tableName);
         IDataReader reader = null;
         try
         {
             connection.Open();
             reader = cmd.ExecuteReader();
             return reader.GetFields().ToArray();
         }
         catch (Exception)
         {
             throw;
         }
         finally
         {
             if (reader != null)
             {
                 reader.Dispose();
             }
             if (connection.State != ConnectionState.Closed)
             {
                 connection.Close();
             }
             connection.Dispose();
             cmd.Parameters.Clear();
             cmd.Dispose();
             context.Dispose();
         }
     });
     return cache;
 }