IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Afficher un champ timestamp SQL Server dans une DataGridView


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Afficher un champ timestamp SQL Server dans une DataGridView
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT LOG_ID, LOG_TS, LOG_DATETIME, LOG_APPLICATION FROM LOG_IMPORT_CSV
    Les types sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [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) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    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

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par lugiciel Voir le message
    Je pense qu'il s'agit plus d'un problème de traitement d'un champ binaire?
    Non la réalité est que Timestamp est un faux ami. Il s'agit de nombres binaires auto-incrémentés. Pour information, ce type s'appelle désormais rowversion, le nom Timestamp est en train d'être déprécié.

    Impossible donc de récupérer une date depuis ce type de données.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Pourtant, les DataGridView VB sont susceptibles de gérer les images, donc de gros fichiers binaires. Pourquoi ne pourraient-elles pas gérer un timestamp, qui, si je ne me trompe pas, n'est stocké que sur un seul octet?

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Quel est l'intérêt de l'afficher ?

    En principe on utilise ce type de colonne afin de pouvoir vérifier si un champ de type VARBINARY(MAX) par exemple a été mis à jour, afin de ne pas avoir à charger le contenu de ce champ.

    Il n'y a donc aucune plus value à l'afficher

    Est-ce que tu as essayé de changer le type de colonne dans le DataGridView ? Si tu mets une colonne de type Text (TextColumn il me semble) à la place d'une colonne de type Image, ça donne quoi ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2012, 19h56
  2. Réponses: 2
    Dernier message: 13/01/2010, 21h24
  3. Réponses: 3
    Dernier message: 05/09/2008, 17h25
  4. réplication d'un BDD sql server dans une BDD mysql
    Par bene86 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 23/08/2007, 11h09
  5. Afficher un champ de la BD dans une zone de texte
    Par uloaccess dans le forum Access
    Réponses: 3
    Dernier message: 25/11/2005, 23h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo