Vb2005 express et SQL Server

codebleu Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 6 mai 2009 - 4 mai 2007 à 14:35
n_youbi Messages postés 12 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 30 octobre 2007 - 23 mai 2007 à 13:32
Bonjour,

Je souhaiterais savoir comment on peut lire les valeurs de champs des tables d'un fichier .mdf à partir d'un module en vb 2005 express.

merci d'avance

Bleu le code...

9 réponses

dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
4 mai 2007 à 15:39
Bonjour,

Tu peux le faire par une requête qui charge un Dataset, petit bout de code ci-dessous :



Imports System.Data.SqlClient      '   ne pas oublier pour l'accès à sql
.....
    Public conn As SqlConnection        '   connexion sql
    Public CmdS As SqlCommand         '   commande
    Public da As SqlDataAdapter            '   DataAdapter
    Public ds As New DataSet()            '   DataSet : contiendra les données
    Public strSql As String                     '   string pour la conception de la requête
    '   pour l'accès à sql : nom de la base, nom du serveur, user+password
    Public strConn As String = "Initial Catalog=FAVRE;Data Source=Serveur-corc;User ID=sa;Password=;"
.....
Private sub .....
    GenreDossier = TextBox1.text
    '   Chargement du Combobox "sélection du dossier" à partir du DataSet
        strSql = "SELECT DISTINCT ESRC_FILE FROM CONTRACT WHERE ESRC_FILE LIKE '%" & GenreDossier & "%' "
        Connexion(strConn, strSql)
        da.Fill(ds, "CONTRACT")
        With ds.Tables("CONTRACT")
            For i = 0 To .Rows.Count - 1
                CBBdossier.Items.Add(.Rows(i).Item("ESRC_FILE"))
            Next
        End With
.....
End sub

Private Sub Connexion(ByVal strConn As String, ByVal strSql As String)
        '       Connexion à SQL et chargement DataAdapter
        conn = New SqlConnection(strConn)
        conn.Open()
        CmdS = New SqlCommand(strSql)
        da = New SqlDataAdapter(CmdS)
        CmdS.Connection() = conn
End Sub

Penser à fermer la connexion et à vider DataSet et DataAdapter après usage.

        Try
            conn.Close()
        Catch ex As Exception
        End Try
        Try
            ds.Clear()
            ds.Dispose()
            ds.Reset()
        Catch ex As Exception
        End Try
        Try
            da.Dispose()
        Catch ex As Exception
        End Try

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp
0
codebleu Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 6 mai 2009
7 mai 2007 à 10:14
dp_favresa,

Merci pour l'exemple que tu viens de me donner. Mais je souhaiterais que tu me l'explique un peu plus pour que je me m'adapte à mon programme. Voici l'organisation que j'ai :

Ma base de données SQL Server:     "OilSepDatabase.mdf"
    Cette base possède plusieurs tables     ("OilSepTable",...)
    Avec des enregistrements :                 ("Type", "OrientVH", ....)

Mon programme :                           "ClassOilsep.vb"
    du type ClassLibrary.

L'objectif:   - à partir du programme
"ClassOilsep.vb" je souhaite lire la table
                           "OilSepTable"
de la base
"OilSepDatabase.mdf".
                 - ex: si le champ de la table "OrientVB" est équivalent à la variable                         "TypeSep" alors le programme peux poursuivre sinon on continue                         de scruter les valeurs de ce champs.

Je n'ai pas bien compris aussi comment était construit la connexion :

strSQL = "SELECT DISTINCT ESRC_FILE FROM CONTRACT WHERE ESRC_FILE LIKE '%" & GenreDossier & "%' "

Dans l'attente de te lire,




Bleu le code...
0
dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
7 mai 2007 à 14:50
Bonjour,

Selon tes exemples, tu peux construire :

1. string de connexion

Public strConn As String = "Initial Catalog=
OilSepDatabase;Data
Source=nom de ton serveur;User ID=sa;Password=;"
>>  se connecter à la base OilSepDatabase sur le serveur "nom de ton serveur" .....

2. string de requête

strSQL = "SELECT
Type, OrientVH, OrientVB
>>  sélection des champs

FROM
OilSepTable



>>  à partir de la table OilSepTable

WHERE OrientVB LIKE '%" & TypeSep & "%' "
>>  si OrientVB comme (au sens large) TypeSep
Tu peux aussi tester l'égalité stricte  WHERE OrientVB = ' " & TypeSep " '  "Si TypeSep ABC et OrientVB ABC  et  zzABC par exemple
Like donne les 2 champs,  = donne seulement le champ ABC

3. tu viens alors de charger une table (Dataset) contenant les infos répondant à ta requête.
Tu peux l'utiliser par exemple de la façon suivante :
for i = 0 to ds.tables("OilSepTable").rows.count - 1
       variable = ds.tables("OilSepTable").rows(i).item("OrientVH").value
       ==>>  pour montrer comment accéder à un champ du DataSet
       suite du traitement
next



J'éspère avoir été assez clair.
PS : je suis en vacances cette semaine, j'essaie de suivre ton cas.

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp
0
codebleu Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 6 mai 2009
8 mai 2007 à 10:22
Merci encore pour ces infos, je commence à mieux comprendre la procédure.
J'ai essayé de mettre en oeuvre ce que tu m'as dis et je me heurte à une erreur :"Une erreur s'est produite lors de l'établissement d'une connexion au serveur. Lors de la connexion à SQL Server 2005, cet échec peut être dû au fait que les paramètres par défaut de SQL Server n'autorisent pas les connexions à distance. (provider: Interfaces réseau SQL, error: 26 - Erreur lors de la localisation du serveur/de l'instance spécifiés". et cela, pour l'instruction: "conn.Open()" où conn est défini comme suit :

    Public strConn As String = "Initial Catalog=OilSepdataBase;Data Source=Data Source=.\SQLEXPRESS;AttachDbFilename=F:\PackageLib\OilSep\OilSep\OilSepDatabase.mdf;Integrated Security=True;User Instance=True;User ID=sa;Password=;"
....

Private Sub Connexion(ByVal strConn As String, ByVal strSql As String)
        'Connexion à SQL et chargement DataAdapter
        conn = New SqlConnection(strConn)
        conn.Open()
        CmdS = New SqlCommand(strSql)
        da = New SqlDataAdapter(CmdS)
        CmdS.Connection() = conn
    End Sub

Je recherche de mon côté mais si tu as une idée..

Bonnes vacances,




Bleu le code...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
codebleu Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 6 mai 2009
8 mai 2007 à 18:34
J'ai réussi à résoudre mon problème de connexion, oublie le dernier message.

Par contre, j'ai un souci avec la lecture d'un champ à partir de son nom voici la ligne de programme qui a généré cette erreur :

if ds.Tables("OilSepTable").Rows(i).Item("Type") =... then....

le message d'erreur est le suivant : "La colonne 'Type' n'appartient pas à la table OilSepTable."

Je te rassure j'ai vérifié cette colonne existe, les autres colonnes ne sont pas reconnues aussi.
La seule façon qui m'a permis de lire les enregistrements c'est en mettant ".item(0)" à la place de ".item("Type")". et là j'ai pas d'idées pour trouver la solution...

Qu'en penses tu ?





Bleu le code...
0
dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
15 mai 2007 à 16:13
Bonjour,

J'ai liquidé mes affaires en suspens et peux reprendre ton cas.
Je ne connais pas SQL 2005, je ne sais pas il y a une différence pour l'accès aux données du DataSet.
Je ne reçois ce message que si j'oublie de déclarer un champ dans "SELECT" et que j'essaye d'utiliser ce champ.

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp
0
codebleu Messages postés 30 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 6 mai 2009
17 mai 2007 à 19:26
Je te remercie encore dp_favresa, j'ai réussi à charge les champs de la base de sonnées et à les manipuler.

J'aimerais te poser une question concernant un autre point sur les BD.
Voilà, j'arrive à lire à faire toutes mes opérations de calcul, maintenant j'aimerais sauvegarder les données qui m'intéressent.
En fait, je voudrais créer un nouveau fichier .mdf et y coller les tables que j'ai sélectionnées avec un enregistrement uniquement.
Ceci pour récupérer les informations ultérieurement.

Je ne sais pas si c'est la meilleure façon de sauvegarder des données...

A te lire




Bleu le code...
0
dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
18 mai 2007 à 16:02
Bonjour,

Si tu veux vraiment sauver ces données dans une autre table, il faut la créer dans "Enterprise Manager" avec
les champs voulus et leurs caractéristiques (type de champ, longueur). Tu peux créer cette nouvelle table aussi
dans ta BD existante. Fais attention aux clés à double qui peuvent survenir si tu récupère des données identiques
dans des SELECT successifs. Ci-dessous un exemple de code que j'emploie :

        '       Ajout de l'employé dans la table
        strSql = "INSERT INTO Employés (EmplNum, EmplNom, EmplPays, EmplLoca, EmplNais, EmplAct, EmplEntr, EmplSorti, EmplAVS, "
        strSql = strSql & "EmplBadg, EmplCle, EmplBlouse, EmplVeste, EmplPanta, EmplSalop, EmplTele, EmplPoint, EmplSecu, EmplRema) "
        strSql = strSql & "VALUES ('" & EmplNum & "', '" & EmplNom & "', '" & EmplPays & "', '" & EmplLoca & "', '"
        strSql = strSql & EmplNais & "', '" & EmplAct & "', '" & EmplEntr & "', '" & EmplSorti & "', '" & EmplAVS & "', '"
        strSql = strSql & EmplBadg & "', '" & EmplClé & "', '" & EmplBlous & "', '" & EmplVeste & "', '" & EmplPanta & "', '"
        strSql = strSql & EmplSalop & "', '" & EmplTélé & "', '" & EmplPoint & "', '" & EmplSécu & "', '" & EmplRema & "') "

        '       Insertion d'un enregistrement dans table
        CmdS.CommandType = CommandType.Text
        CmdS.CommandText = strSql
        CmdS.Connection() = conn
        CmdS.ExecuteNonQuery()

Maintenant c'est à toi de voir si tu désire avoir ces données à double ou si un accès par ton SELECT est suffisant,
sachant que tu peux faire des copies de sécurité de ta BD par "Enterprise Manager".

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp
0
n_youbi Messages postés 12 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 30 octobre 2007
23 mai 2007 à 13:32
bonjour
je besoin d'afficher le nombre de jour d'un mois déterminer (janvier:1;février:2)
dans une page aspx sous asp.net 2005
merci d'avance
0
Rejoignez-nous