2016-02-28 1 views
0

Je voudrais savoir s'il existe un moyen de supprimer une colonne spécifique lors de l'affichage dans une vue de données. Ci-dessous le statemnt sql pour récupérerSupprimer une colonne de l'instruction 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; 

Les raisons est parce que, j'ai un type de format CLOB, donc il ne sera pas afficher dans datagridview. Donc, je prévois de supprimer une colonne qui stocke le format CLOB. Je peux spécifier, mais le problème je sélectionne la table basée sur la zone de liste déroulante et chaque table a le nombre différent de colonnes tel qu'une table pourrait avoir 31 colonne, une autre table pourrait avoir 28 colonne. Alors, comment je pouvais supprimer seulement une seule colonne. Merci d'avance.

Il y a toujours une erreur lorsque je sélectionne l'état *, il inclut la colonne qui est constituée du format CLOB. Par conséquent, l'erreur existe à oda.Fill (dt) ;. Existe-t-il un moyen de sélectionner * à l'exception des colonnes constituées du format CLOB. Cette aide est vraiment appréciée.

+0

est le nom de colonne même dans toutes ces tables? – Viru

+0

yup le nom de la colonne que je veux supprimer est identique dans toutes les tables. –

Répondre

1

vous pouvez juste faire

dt.Columns.Remove("xyz"); 

Mise à jour

Il semble remplir ne prend pas en charge les données CLOB. La solution ci-dessus ne fonctionnera pas. Vous devez effectuer un changement dans SQL lui-même. Ma suggestion est de tout déplacer dans la procédure stockée et d'utiliser des méta-données pour extraire la colonne que vous voulez (ou d'exclure la colonne que vous ne voulez pas.) Voici un exemple de code. S'il vous plaît noter que je ne l'ai pas testé vous pouvez donc trouver un problème mineur, mais le code donne essentiel de ce que vous pouvez faire pour résoudre votre problème

code 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; 

Script 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

monsieur, puis-je savoir comme si je fais cela, dans la table de base de données, il y aura toujours la colonne droite monsieur, seulement en affichant dans le datagridview il ne s'affichera pas juste sri? –

+0

Oui .... Cela va juste enlever la colonne de la table de données que vous allez afficher et n'affectera pas la base de données – Viru

+0

k monsieur je l'essaie maintenant. –