2016-02-28 3 views
0

Я хотел бы знать, есть ли способ удалить определенный столбец при отображении в datagridview. Ниже приводится SQL statemnt для извлеченияУдалить столбец из оператора select

OleDbDataAdapter oda = new OleDbDataAdapter("select * from BHR_2016_FEB_CIT4114_FYP_GD", con); 
DataTable dt = new DataTable(); 
oda.Fill(dt); 
dt.Columns.Remove("Fingerprint_Template"); 
dataGridViewAttendanceDatabase.DataSource = dt; 

причин является то, потому что, у меня есть тип формата CLOB, поэтому он не будет отображаться в DataGridView. Поэтому я планирую удалить столбец, в котором хранится формат CLOB. Я могу указать, но проблема я буду выбирать таблицу на основе поля со списком, и каждая таблица имеет различное количество столбцов, например, таблица может иметь 31 столбец, а другая таблица может содержать 28 столбцов. Так как я мог удалить только один столбец. Заранее спасибо.

По-прежнему существует ошибка, так как когда i state select *, он включает в себя столбец, который состоит из формата CLOB. Поэтому ошибка существует при oda.Fill (dt) ;. Есть ли способ выбрать * кроме столбцов, которые состоят из формата CLOB. Эта помощь действительно ценится.

+0

имя столбца такое же во всех этих таблицах? – Viru

+0

yup имя столбца, которое я хочу удалить, одинаково во всех таблицах. –

ответ

1

вы можете просто сделать это

dt.Columns.Remove("xyz"); 

Update

Кажется Наполните не поддерживает данные CLOB. Выше решение не будет работать. Вам нужно сделать изменения в самом SQL. Мое предложение состоит в том, чтобы переместить все в хранимой процедуре и использовать метаданные для извлечения столбца, который вы хотите (или исключить столбец, который вам не нужен.) Вот пример кода. Пожалуйста, обратите внимание, я не проверял это, так что вы можете обнаружить некоторые незначительные проблемы, но код дает вам суть того, что вы можете сделать, чтобы решить вашу проблему

C# Код

OleDbConnection oc= new OleDbConnection("[pass your connection string]"); 
OleDbCommand ocom = new OleDbCommand(); 
    ocom.CommandText = "Abc"; // Abc is stored procedure 
    ocom.Connection = oc; 
    ocom.CommandType = CommandType.StoreProcedure; 
    ocom.Parameters.AddWithValue("@tableName","PQR") // pass your table name 
    ocom.Parameters.AddWithValue("@databaseName","IJK"); // pass your database name 
OleDbDataAdapter oda = new OleDbDataAdapter(ocom); 
      DataTable dt = new DataTable(); 
      oda.Fill(dt); 
      dataGridViewAttendanceDatabase.DataSource = dt; 

SQL Script

Create Porocedure Abc (@tableName varchar(255),@databaseName varchar(255)) 
Begin 

SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), 'Fingerprint_Template,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND TABLE_SCHEMA = @databaseName), CONCAT(' FROM ',@tableName)); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

End 
+0

сэр, может я знаю, как если бы я это сделал, в таблице базы данных будет по-прежнему столбец справа сэр, только при отображении в datagridview он не будет отображаться справа sri? –

+0

Да .... Это просто удалит столбец из таблицы данных, который вы покажете и не повлияет на базу данных. – Viru

+0

k sir Я пытаюсь это сделать сейчас. –