从select语句中删除列

时间:2016-02-28 15:51:50

标签: c# visual-studio oracle11g

我想知道在datagridview中显示时是否有一种删除特定列的方法。下面是要检索的sql statemnt

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列。所以我怎么能只删除一个列。谢谢你提前。

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

1 个答案:

答案 0 :(得分:1)

你可以这样做

 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;

<强>更新

似乎Fill不支持CLOB数据。以上解决方案无效。您需要在SQL本身进行更改。我的建议是移动存储过程中的所有内容并使用元数据来提取所需的列(或排除您不想要的列。)以下是示例代码。请注意我没有对它进行测试,因此您可能会发现一些小问题,但代码为您提供了解决问题所能做的事情的要点

C#代码

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

SQL脚本

function Car(color, drivetrain) {
    this.color = color;
  this.drivetrain = drivetrain;
  this.stats = function(){
  console.log(color + " " + drivetrain);
  };
}

Car.prototype.year = 2012;
Car.prototype.funcyear = function () { console.log(year);}; //reference error

var toyota = new Car('red', 'fwd');
toyota.stats();
console.log(toyota.year);
toyota.funcyear();
相关问题