从 select 语句中删除列

本文关键字:删除列 语句 select | 更新日期: 2023-09-27 18:36:33

我想知道有没有办法在数据网格视图中显示时删除特定列。下面是要检索的 sql 状态

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,因此它不会显示在数据网格视图中。所以我计划删除存储 CLOB 格式的列。我可以指定,但是我将根据组合框选择表的问题,并且每个表都有不同数量的列,例如一个表可能有 31 列,另一个表可能有 28 列。那么我怎么能只删除一列。提前谢谢。

仍然存在错误,因为当我声明选择 * 时,它包括由 CLOB 格式组成的列。因此,ODA存在错误。Fill(dt);.有没有办法选择 *,除了由 CLOB 格式组成的列。非常感谢这种帮助。

从 select 语句中删除列

你可以这样做

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