public override StiDataColumnsCollection GetColumnsFromData(StiData data, StiDataSource dataSource, CommandBehavior commandBehavior)
        {
            var dataColumns = new StiDataColumnsCollection();
            var sqlSource   = dataSource as StiSqlSource;

            try
            {
                if (sqlSource.SqlCommand != null && sqlSource.SqlCommand.Length > 0 && data.Data is NpgsqlConnection)
                {
                    var connection = data.Data as NpgsqlConnection;
                    OpenConnection(connection, data, dataSource.Dictionary);

                    using (var dataAdapter = new NpgsqlDataAdapter(sqlSource.SqlCommand, connection))
                        using (DataTable dataTable = new DataTable())
                        {
                            dataTable.TableName = sqlSource.Name;

                            dataAdapter.SelectCommand.CommandTimeout = sqlSource.CommandTimeout;
                            dataAdapter.SelectCommand.Prepare();
                            dataAdapter.Fill(dataTable);

                            foreach (DataColumn column in dataTable.Columns)
                            {
                                dataColumns.Add(new StiDataColumn(column.ColumnName, column.Caption, column.DataType));
                            }
                        }

                    CloseConnection(data, connection);
                }
            }
            catch (Exception e)
            {
                StiLogService.Write(this.GetType(), e);
                if (!StiOptions.Engine.HideExceptions)
                {
                    throw;
                }
            }

            return(dataColumns);
        }
		public override StiDataColumnsCollection GetColumnsFromData(StiData data, StiDataSource dataSource)
		{
			StiDataColumnsCollection dataColumns = new StiDataColumnsCollection();
			StiSqlSource sqlSource = dataSource as StiSqlSource;

			try
			{
				if (sqlSource.SqlCommand != null && sqlSource.SqlCommand.Length > 0)
				{
                    if (data.Data is SqlCeConnection)
					{
                        SqlCeConnection connection = data.Data as SqlCeConnection;
						OpenConnection(connection, data, dataSource.Dictionary);
                        using (SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter(sqlSource.SqlCommand, connection))
						{
							DataTable dataTable = new DataTable();
							dataTable.TableName = sqlSource.Name;

							dataAdapter.SelectCommand.Prepare();							
														
							dataAdapter.FillSchema(dataTable, SchemaType.Source);
						
							foreach (DataColumn column in dataTable.Columns)
							{
								dataColumns.Add(new StiDataColumn(column.ColumnName, column.Caption, column.DataType));
							}

							dataTable.Dispose();
						}
						CloseConnection(data, connection);
					}
				}
			}
			catch (Exception e)
			{
				StiLogService.Write(this.GetType(), e);
			}
			
			return dataColumns;
		}