Afficher un champ timestamp SQL Server dans une DataGridView

lugiciel - 3 mai 2013 à 12:48
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 4 mai 2013 à 16:45
Bonjour,

Les logiciels utilisés sont :

- Windows 7 Professionnel SP1
- SQL Server 2008 R2
- Visual Studio 2010 Professional

Je voudrais afficher dans une DataGridView de mon appli VB les colonnes issues de la requête suivante :

SELECT LOG_ID, LOG_TS, LOG_DATETIME, LOG_APPLICATION FROM LOG_IMPORT_CSV

Les types sont :
[LOG_ID] [bigint] IDENTITY(1,1) NOT NULL,
[LOG_TS] [timestamp] NOT NULL,
[LOG_DATETIME] [datetime] NOT NULL,
[LOG_APPLICATION] [varchar](50) NULL

Si je ne mets pas le champ LOG_TS, pas de souci. Mais si j'inclus ce champ de type timestamp dans ma requête, alors j'obtiens ce message abscons :

"The following exception occurred in the DataGridView:

System.ArgumentException: Parameter is not valid.

at System.Drawing.Image.FromStream(Stream stream, Boolean
useEmbeddedColorManagement, Boolean validateImageData)

at System.Drawing.ImageConverter.ConvertFrom(ITypeDescriptorContext
context, CultureInfo culture, Object value)

at System.Windows.Forms.Formatter.FormatObjectInternal(Object value,
Type targetType, TypeConverter sourceConverter, TypeConverter
targetConverter, String formatString, IFormatProvider formatInfo, Object
formattedNullValue)

at System.Windows.Forms.Formatter.FormatObject(Object value, Type
targetType, TypeConverter sourceConverter, TypeConverter targetConverter,
String formatString, IFormatProvider formatInfo, Object formattedNullValue,
Object dataSourceNullValue)

at System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value,
Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter
valueTypeConverter, TypeConverter formattedValueTypeConverter,
DataGridViewDataErrorContexts context)"

J'ai essayé diverses conversion de type, que ce soit au niveau SQL (avec CAST ou CONVERT) ou au niveau VB (ToString, BitConverter, ...) sans aucun succès.

Pour info voici mon code VB.NET (du moins les parties concernées) :

Private WithEvents bindingSource1 As New BindingSource()

Me.DataGridView1.DataSource = Me.bindingSource1

-- Création de ma connexion w_cnx
-- w_sql est ma requete SQL

Dim command1 As New OleDbCommand(w_sql, w_cnx)
Dim reader As OleDbDataReader
reader = command1.ExecuteReader()

Dim table As New DataTable()
table.Load(reader)
table.Locale = System.Globalization.CultureInfo.InvariantCulture

Me.bindingSource1.DataSource = table

Mais je ne pense pas que le code VB soit en cause puisque tout fonctionne bien si j'enlève le champs LOG_TS de ma requête

Je pense qu'il s'agit plus d'un problème de traitement d'un champ binaire?

Merci de votre aide

1 réponse

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
4 mai 2013 à 16:45
Bonjour,

Apparemment, il tente de traiter ton champ comme une image, il faudra peut être lui signaler explicitement le type de ce champ, mais ne manipulant pas du tout cette technique, je ne vois pas comment faire.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rejoignez-nous