我想知道在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格式的列。非常感谢这个帮助。
答案 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();