2016-02-28 109 views
0

我想知道有沒有辦法在datagridview中顯示時刪除特定的列。下面是要檢索的SQL狀態從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列。所以我怎麼能只刪除一列。先謝謝了。

仍然有一個錯誤,因爲當我選擇*狀態時,它包含了由CLOB格式組成的列。因此oda.Fill(dt);存在錯誤。有沒有一種方法可以選擇*除了包含CLOB格式的列。這個幫助真的很感激。

+0

是所有這些表中相同的列名? – Viru

+0

是我想刪除的列名在所有表中都是相同的。 –

回答

1

你可以做到這一點

dt.Columns.Remove("xyz"); 

更新

看來填寫不支持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腳本

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顯示它不會顯示正確的斯里? –

+0

是的....這只是要刪除您要顯示的數據表中的列,並且不會影響數據庫 – Viru

+0

k先生,我現在嘗試它。 –