2016-02-28 81 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先生,我现在尝试它。 –