Connexion pour projet avec deploiement

Résolu
scoufli Messages postés 3 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 8 décembre 2010 - 16 juil. 2009 à 19:33
scoufli Messages postés 3 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 8 décembre 2010 - 20 juil. 2009 à 13:16
Bonjour à tous!

Je m'en remet à vous car je n'ai pas trouvé mon bonheur ici:
http://www.connectionstrings.com/sql-server

En fait, dans le cadre d'un projet, je dois absolument travailler avec une base de données sql server (que j'évitais ^^')
Mon problème, c'est que je dois créer une solution de déploiement (pour une installation sur une autre machine), et que toutes les connexion string que j'ai pu trouver poseront problème (a moins que je n'ai rien compris --")

je voudrais trouver une connexion string du même style que pour les connexions access (on donne le chemin du fichier et hop ca fonctionne, mais je ne sais pas si c'est possible. Ne me tapez pas sur la tête si j'ai dis une betise hein!), ou en tout cas une solution supportant le déploiement, pouvant fonctionner donc après sur d'autres machines.

Merci d'avance

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 juil. 2009 à 16:20
Salut
L'accès à un SQL Server, contrairement à Access, se fait au travers d'une connexion "pipe", c'est à dire que la connexion se fera au travers d'un port ethernet, local ou distant.
Si ton SQL Server est sur :
- la même machine que ton projet, il suffit de désigner le serveur par le nom de ta machine.
- une autre machine sur le réseau, ce sera le nom de la machine distante.

Ensuite, un autre paramètre : Le nom de la DB = "Catalog"

Et bien sûr l'identifiant de connexion et mot de passe :
Si ton SQL Server est sur :
- la même machine que ton projet, tu pourras t'y connecter avec le même identifiant que ta session Windows = SSPI (plus simple)
- une autre machine sur le réseau, il faudra créer sur le SQL Server :
[*] des identifiants (dans la partie "Sécurité" général)
[*] Associer ces identifiants à ta DB (dans la partie "Sécurité" de ta DB)

Je n'ai pas d'exemple sous la main en .Net, mais voici un exemple en VB6/VBA :

    Public cnnSqlServer As ADODB.Connection
    Public Function ConnectSqlServer(sServerName As String, _
                                     sDBName As String) As Boolean
    ' Renvoie True si connexion Ok
    On Error GoTo Erreur
    With cnnSqlServer
        ' Referme si déjà ouverte
        If .State <> adStateClosed Then .Close
        ' Paramétrage connexion
        .ConnectionTimeout = 25
        .Provider = "sqloledb"
        .Properties("Data Source").Value = sServerName
        .Properties("Initial Catalog").Value = sDBName
        If IsSqlServerLocal(sServerName) Then
            ' SQL Server sur la même machine : Authentification Windows
            .Properties("Integrated Security").Value = "SSPI"
        Else
            ' SQL Server dédié
            .Properties("Locale Identifier").Value = 1033   ' Anglais
            .Properties("User ID").Value = sUserID
            .Properties("Password").Value = sPassword
        End If
        On Error Resume Next
        ' Connexion
        .Open
        ' Attend connexion terminée
        Do While .State = adStateConnecting
            DoEvents
        Loop
        On Error Goto 0
        ' Au final, renvoie True si on est bien ouvert
        ConnectSqlServer CBool(.State adStateOpen)
    End With
Fin:
    Exit Function
Erreur:
    MsgBox "#### ConnectSqlServer - Erreur " & CStr(Err.Number) & " - " & Err.Description
    GoTo Fin
End Function
et
Public Function IsSqlServerLocal(NomDuServeur As String) As Boolean
    ' Renvoie True si le SQL Server est installé sur la même machine
    '   que celle qui veut faire des requètes (ici)
    ' Utile pour le mode de connexion et la conversion des dates
    Dim sTemp As String
    sTemp = myComputerName
    IsSqlServerLocal CBool(LCase(NomDuServeur) LCase(sTemp))
End Function
et
Public Function myComputerName() As String
    ' Renvoie le nom du poste
    Dim sTemp As String
    Dim r As Long
    sTemp = String(MAX_COMPUTERNAME_LENGTH, Chr$(0))
    r = MAX_COMPUTERNAME_LENGTH + 1
    Call GetComputerName(sTemp, r)
    sTemp = Left$(sTemp, r)
    myComputerName = sTemp
End Function


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juil. 2009 à 10:17
Mais y-a pas de quoi
0
scoufli Messages postés 3 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 8 décembre 2010
20 juil. 2009 à 12:15
En fait je n'ai pas encore eu le temps de répondre ce week end, alors je disais:

Et bien merci de ces explications, je comprends un peu mieux le système de Sql Server, mais j'ai encore une petite question.
Comment je pourrais faire pour que ce projet soit viable?
Ca reste flou.
Admettons j'installe ce projet sur une autre machine, avec sql server d'installé, si je met cette connectionString:
Provider=SQLNCLI;Server=.\SQLExpress;AttachDbFilename=c:\mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;

Est ce que mon projet tournera?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juil. 2009 à 13:11
Salut
Oui si :
- SQL Server Express est installé sur la machine
- si les fichiers "mdf" se trouvent directement sur le chemin C:\
- si la base de données s'appelle "dbname"

Il est certain que certaines machines ne seront pas installées de la même manière.
Plutôt que de créer une ConnectionString contenant tous les éléments de connexion, il vaut mieux dissocier chaque paramètre comme montré dans l'exemple, avec .Properties("xxx").Value = yyy
Si des éléments doivent changer d'une machine à une autre, il faudra rendre paramétrable chacun de ces éléments --> prévoir options + fichier ini ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
scoufli Messages postés 3 Date d'inscription samedi 23 mai 2009 Statut Membre Dernière intervention 8 décembre 2010
20 juil. 2009 à 13:16
Ok, merci beaucoup pour tes explications claires et ta rapidité de réponse ;)
0
Rejoignez-nous