2008-10-02 5 views
0
Function FillAdminAccount() As Boolean 

    FillAdminAccount = True 

      Try 

     SQLconn.ConnectionString = "connect timeout=9999999;" & _ 
            "data source=" & DefaultIserver & ";" & _ 
            "initial catalog=" & DefaultIdBase & "; " & _ 
            "user id=userid;" & _ 
            "password=userpass;" & _ 
            "persist security info=True; " & _ 
            "packet size=4096" 
     SQLconn.Open() 

     SQLcmd.CommandType = CommandType.Text 

     SQLcmd.CommandText = "Select distinct username, cast(convert(varchar,userpassword) as varchar) as 'userpassword' from " & tblUsersList & " where usertype='MainAdmin'" 
     SQLcmd.Connection = SQLconn 

     SQLreader = SQLcmd.ExecuteReader 

     While SQLreader.Read = True 
      CurrentAdminUser = SQLreader("username").ToString 
      CurrentAdminPass = SQLreader("userpassword").ToString 'PROBLEM' 
     End While 

    Catch ex As Exception 
     ErrorMessage(ex) 
    Finally 
     If SQLconn.State = ConnectionState.Open Then SQLconn.Close() 
     If SQLreader.IsClosed = False Then SQLreader.Close() 
    End Try 

End Function 'FillAdminAccount 

Veuillez voir la ligne avec le commentaire PROBLÈME. Sur ce code, la sortie est égale à "mot de passe utilisateur. Comme vous pouvez le voir, il n'y a pas de guillemet à droite et Je me demande pourquoi.En passant, le type de données du mot de passe utilisateur dans la base de données est Binaire. souhaitez, vous pouvez me aider à ce sujet. Merci you..x_xProblème de chaîne avec SQL Reader?

+0

J'espère que ce n'est pas le vrai mot de passe pour une base de données à votre travail 0_0 – Dana

+0

Quelle est l'erreur que vous obtenez? Est-ce que cela se produit au moment de la compilation ou de l'exécution? Que voulez-vous dire par "comme vous pouvez le voir, il n'y a pas de point d'interrogation sur la droite"? – Danimal

+0

Danimal - >> désolé, j'ai déjà édité le texte.-sef – sef

Répondre

2

NE JAMAIS stocker les mots de passe réels dans la base de données. Maintenant, il semble que vos mots de passe pourraient être pas tout à fait texte en raison des opérations de conversion/cast, mais vous avez toujours un problème. À tout le moins tout cryptage utilisé est facilement réversible, et si votre serveur sql finit sur une machine différente de l'application, alors les mots de passe voyageront sur le fil en texte brut.

Si vous devez le faire (peut-être à cause d'un système existant ou mandat ci-dessus), puis au moins correspondant à la faire au serveur de sorte que le mot de passe ne vient jamais à l'application. Ce que doit faire utilise quelque chose comme la fonction HashBytes() de SQL Server 2005 pour stocker uniquement un hachage du mot de passe réel. Lorsque quelqu'un tente de se connecter, hachez la tentative de mot de passe et faites correspondre les hachages.

En ce qui concerne votre question spécifique, je suppose que l'opération de conversion ou de conversion a échoué, ce qui a pour résultat une valeur NULL revenant à l'application. Et avez-vous à la fois un CAST() et un CONVERT() au même type? C'est redondant.

1

se pourrait-il

as varchar) as 'userpassword' 

devrait être

...as varchar) as [userpassword] .. 

ou

...as varchar) as userpassword .. 
+0

Tnx mais toujours eu la même sortie .. – sef

1

@Oglester a raison, ce sont les guillemets simples 'userpassword'.

Ce n'est pas un bug, mais il est tout simplement stupide:

cast(convert(varchar,userpassword) as varchar 

Vous pouvez utiliser coulé ou convertir, mais il n'y a pas d'intérêt à utiliser les deux.