2011-03-25 6 views
0
Dim con As New System.Data.SqlClient.SqlConnection 
    con.ConnectionString = "Server=iraq\\sqlexpress ; Database=stats ; Trusted_Connection=True ;" 
    Dim com As New System.Data.SqlClient.SqlCommand 
    com.CommandText = "insert into users values('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "')" 
    com.Connection = con 
    con.Open() 
    com.ExecuteNonQuery() 
    con.Close() 

Il y a de nouveaux événements se produisent quand je régler la chaîne de connexionProblèmes de connexion à la base de données en VB.NET

con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\WebSites\WebSite2\App_Data\stats.mdf;Integrated Security=True;User Instance=True" 

me montrer l'erreur avec com.ExecuteNonQuery()

toute suggestion?

+3

Comment pouvez-vous attendre que quelqu'un vous aide si vous ne fournissez même pas le message d'erreur? – steinar

+3

Veuillez lire les attaques par injection SQL et ne laissez jamais un code comme celui-ci passer en production. – asawyer

+0

Savez-vous ce que [injection SQL] (http://msdn.microsoft.com/en-us/library/ms161953.aspx) est? Voir aussi: [Exploits of a Mom] (http://xkcd.com/327/) –

Répondre

3

Impossible de parler à votre connexion Chaîne. Ça a l'air plutôt difficile. Au-delà de cela, je vois quelques problèmes:

A. Ceci est le plus évident pour moi: Votre instruction INSERT est incorrecte. Essayez ceci

INSERT INTO your_table_name (column_name_1, column_name_2, . . .) VALUES (value_1, value_2, . . .) 

B. Étendre ce qui précède, conformément aux commentaires des autres, et bien paramétrons votre requête. En outre, utilisez le fichier de paramètres d'application pour votre chaîne de connexion, au lieu de le coder en dur dans votre application. Enfin, utilisez un bloc Using, pour les objets de connexion et de commande - ceci gérera l'initialisation et la mise au rebut de ceux-ci. J'ai enlevé ce qui suit d'un vieux projet de la mienne - j'espère que je n'ai pas manqué toute adaptation de la sytaxe pour ce poste. Le code d'origine a couru contre une procédure stockée dans le back-end SQL Server:

Public Overridable Sub DataINSERT() Implements IAppUser.DataINSERT 'tblAppUser 

    Dim CommandText As String = "INSERT INTO tblUser(UserName, PassWord, Enabled) VALUES(@UserName, @PassWord, @Active)" 

    'The Connection String can be established in your Project Settings file: 
    Using cn As New SqlClient.SqlConnection(My.Settings.MyDataConnectionString) 
     Using cmd As New SqlClient.SqlCommand(CommandText, cn) 
      cmd.CommandType = CommandType.Text 

      'INSERT PARAMETER SET_UP: 
      Dim prmUserName As New SqlClient.SqlParameter("@UserName", SqlDbType.VarChar, 50) 
      prmUserName.Direction = ParameterDirection.Input 
      prmUserName.Value = _UserName 
      cmd.Parameters.Add(prmUserName) 

      Dim prmPassWord As New SqlClient.SqlParameter("@PassWord", SqlDbType.VarChar, 50) 
      prmPassWord.Direction = ParameterDirection.Input 
      prmPassWord.Value = _PassWord 
      cmd.Parameters.Add(prmPassWord) 

      Dim prmActive As New SqlClient.SqlParameter("@Active", SqlDbType.Bit, 0) 
      prmActive.Direction = ParameterDirection.Input 
      prmActive.Value = _Active 
      cmd.Parameters.Add(prmActive) 

      Try 
       cn.Open() 
       cmd.ExecuteNonQuery() 
      Catch ex As Exception 
       Dim str As String = Me.ToString & ": " & ex.Message & "/" & ex.TargetSite.ToString 
       MsgBox(str) 
      End Try 

     End Using 
    End Using 

End Sub 'DataINSERT tblAppUser 

Mon dernier commentaire serait de vérifier les procédures stockées avec SQL Server. Faites-moi savoir si cela n'a aucun sens.

Questions connexes