[vb.net/sql] insertion de données

Doom_aok Messages postés 46 Statut Membre -  
 ramzi -
Bonjour,
je veux inserer des données à partir d'un formulaire windows crée en vb

voila mon code
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Common.DbCommand

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New SqlConnection

con.ConnectionString = ("data source=.;initial catalog=Commerce;Integrated Security=SSPI")
con.Open()

(**) Dim cmd As New SqlCommand("insert client values"(Me.TextBox1.Text & ", " & Me.TextBox2.Text & ", " & Me.TextBox3.Text & ", " & Me.TextBox4.Text & ", " & Me.TextBox5.Text), con)

Dim affectedrows As Integer = cmd.ExecuteNonQuery()

con.Close()
End Sub
End Class

kan j'execute j'ai cette exception au niveau de la ligne (**)
La conversion de la chaîne ", , , , " en type 'Integer' n'est pas valide
je ne sais pas vraiment ce que je dois faire dans ce cas
j'espere que vous allez m'aider a trouver l'erreur

merci d'avance
Configuration: Windows XP
Firefox 2.0.0.8

5 réponses

  1. abdou
     
    ya aussi une erreur dans la requete "insert client values..."
    insert into client...
    6
    1. Karouma
       
      j'ai un gros pb avec l'insertion
      'voici mon bouton qui permet d'ajouter un personnel a la table personnel de la BD sql server 2005

      Private Sub Enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enregistrer.Click
      Nom = T1.Text
      Prenom = T2.Text
      Date_naiss = T3.Text
      Sexe = T4.Text
      CIN = T5.Text

      Sit_fami = T6.Text
      Date_effet = T7.Text
      Nom_jeune_fille = T8.Text
      Nationnalite = T9.Text

      Num_pass = T10.Text

      Try

      cnx.ConnectionString = ConfigurationManager.ConnectionStrings("DBConnectionString").ToString

      cnx.Open()
      Dim cmd As New SqlCommand
      cmd.CommandType = System.Data.CommandType.Text
      cmd.Connection = cnx
      Dim cmd_compt As New SqlCommand
      cmd_compt.CommandType = System.Data.CommandType.Text
      cmd_compt.Connection = cnx
      cmd_compt.CommandText = "select max(Id_pers) AS max from Personnel"
      Dim read_compt As SqlDataReader
      read_compt = cmd_compt.ExecuteReader()
      read_compt.Read()
      Dim max As Integer = read_compt.Item(0)
      max = max + 1
      read_compt.Close()

      MsgBox(max)

      '**************************************************
      Dim strRequete As String = "INSERT INTO Personnel(Id_pers, CIN, Sexe, Sit_fami, Date_effet, Nom_fami, Prenom, Nom_jeune_fille , Date_naiss, Nationnalite, Num_pass) VALUES (@Id_pers, @CIN, @Sexe, @Sit_fami, @Date_effet, @Nom_fami, @Prenom, @Nom_jeune_fille , @Date_naiss, @Nationnalite, @Num_pass)"

      Dim oSqlDataAdapter As New SqlDataAdapter(strRequete, cnx)
      Dim oDataSet As New DataSet("Personnel")
      oSqlDataAdapter.Fill(oDataSet, "Personnel")
      Dim i As Integer
      For i = 0 To (oDataSet.Tables("Personnel").Rows.Count) - 1
      Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oDataSet.Tables("Personnel").Rows(i)(0).ToString(), oDataSet.Tables("Personnel").Rows(i)(1).ToString())
      Next i
      Console.WriteLine(ControlChars.Lf)
      ' Remplissage de la commande InsetCommand
      oSqlDataAdapter.InsertCommand = New SqlCommand("INSERT INTO Personnel(Id_pers, CIN, Sexe, Sit_fami, Date_effet, Nom_fami, Prenom, Nom_jeune_fille , Date_naiss, Nationnalite, Num_pass) VALUES (@Id_pers, @CIN, @Sexe, @Sit_fami, @Date_effet, @Nom_fami, @Prenom, @Nom_jeune_fille , @Date_naiss, @Nationnalite, @Num_pass)", cnx)

      oSqlDataAdapter.InsertCommand.Parameters.Add("@Id_pers", SqlDbType.Int, 4, "Id_pers")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@CIN", SqlDbType.Int, 4, "CIN")

      oSqlDataAdapter.InsertCommand.Parameters.Add("@Sexe", SqlDbType.VarChar, 5, "Sexe")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Sit_fami", SqlDbType.VarChar, 15, "Sit_fami")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Date_effet", SqlDbType.DateTime, 4, "Date_effet")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Nom_fami", SqlDbType.VarChar, 15, "Nom_fami")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Prenom", SqlDbType.VarChar, 15, "Prenom")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Nom_jeune_fille", SqlDbType.VarChar, 15, "Nom_jeune_fille")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Date_naiss", SqlDbType.DateTime, "Date_naiss")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Nationnalite", SqlDbType.VarChar, 20, "Nationnalite")
      oSqlDataAdapter.InsertCommand.Parameters.Add("@Num_pass", SqlDbType.Int, 4, "Num_pass")

      Dim oDataRow As DataRow
      ' Dim byteArray As Byte() = {&H0, &H0}

      oDataRow = oDataSet.Tables("Personnel").NewRow()
      oDataRow("Id_pers") = max
      oDataRow("CIN") = CType(CIN, Integer)
      oDataRow("Sexe") = T4.Text
      oDataRow("Sit_fami") = T6.Text
      oDataRow("Date_effet") = CType(Date_effet, DateTime)
      oDataRow("Nom_fami") = T1.Text
      oDataRow("Prenom") = T2.Text
      oDataRow("Nom_jeune_fille") = T8.Text
      oDataRow("Date_naiss") = CType(Date_naiss, DateTime)
      oDataRow("Nationnalite") = T9.Text
      oDataRow("Num_pass") = CType(Num_pass, Integer)


      oDataSet.Tables("Personnel").Rows.Add(oDataRow)

      ' Mise à jour de la source de données à partir du DataSet
      oSqlDataAdapter.Update(oDataSet, "Personnel")

      ' Rechargement des données de la source mise à jour
      oDataSet.Clear()
      oSqlDataAdapter.Fill(oDataSet, "Personnel")

      ' Affichage du contenu de oDataSet après insertion d'une ligne de données
      Console.WriteLine(" *** Liste des catégories après la mise à jour *** ")
      Dim ii As Integer
      For ii = 0 To (oDataSet.Tables("Personnel").Rows.Count) - 1
      Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oDataSet.Tables("Personnel").Rows(ii)(0).ToString(), oDataSet.Tables("Personnel").Rows(ii)(1).ToString())
      Next ii

      cnx.Close()
      '**************************************************
      MsgBox("execution en cour")


      ' cmd.ExecuteNonQuery()
      cnx.Dispose()



      MsgBox("ajout réussi")
      cnx.Close()
      Catch ex As Exception
      Console.WriteLine(ex.ToString())
      cnx.Close()
      End Try

      End Sub

      'le résultat de l'éxécution me donne:



      Une exception de première chance de type 'System.FormatException' s'est produite dans mscorlib.dll
      Une exception de première chance de type 'System.FormatException' s'est produite dans mscorlib.dll
      Une exception de première chance de type 'System.FormatException' s'est produite dans mscorlib.dll
      Une exception de première chance de type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
      System.Data.SqlClient.SqlException: La variable scalaire "@Id_pers" doit être déclarée.
      à System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
      à System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
      à System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
      à System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
      à System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
      à System.Data.SqlClient.SqlDataReader.get_MetaData()
      à System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
      à System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
      à System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
      à System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
      à System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
      à System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
      à System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
      à System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
      à System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
      à System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
      à PFE_GA.Form1.Enregistrer_Click(Object sender, EventArgs e) dans C:\Documents and Settings\ben_yahia\Mes documents\Visual Studio 2008\Projects\PFE_GA\PFE_GA\GUI\Form1.vb:ligne 96
      'vraiment je n'ai pas pu résoudre ce pb
      0
  2. Sergio
     
    tu dois utiliser des quote ' pour entourer tes chaines de caractères en SQL (attention pas pour les entiers)

    Dim cmd As New SqlCommand("insert client values('"Me.TextBox1.Text & "', '" & Me.TextBox2.Text & "', '" & Me.TextBox3.Text & "','" & Me.TextBox4.Text & "', '" & Me.TextBox5.Text) & "'", con)

    n'oublie pas de vérifier de doubler dans le champ de tes textbox les quote aussi
    exemple de fonction pour vérifier :

    Public Function text_to_SQL(ByVal text As String) As String
    Return Replace(text, "'", "''")
    End Function

    résultat :

    Dim cmd As New SqlCommand("insert client values('" & text_to_SQL(Me.TextBox1.Text) & "', '" & text_to_SQL(Me.TextBox2.Text) & "', '" & text_to_SQL(Me.TextBox3.Text) & "','" & text_to_SQL(Me.TextBox4.Text) & "', '" & text_to_SQL(Me.TextBox5.Text)) & "'", con)

    Sergio
    6
  3. ramzi
     
    donc pour insérer le donnée dans la base de donnée a partir d'un formulaire

    avec .net
    2
  4. abdou
     
    remplacez "Dim affectedrows As Integer = cmd.ExecuteNonQuery()" par cmd.ExecuteNonQuery()
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. alyakin Messages postés 2 Statut Membre
     
    stp j'ai un msg d'erreur et je parviens pas à me rectifier le msg est le suivant:
    Le format de la chaine est incorrect
    le voilà:
    Dim cmd As New SqlCommand("insert into consultant values"(Convert.ToInt32(Me.id_consultant.Text) & ", '" & Me.nom.Text & "', '" & Me.prenom.Text & "', '" & Me.date_naiss.Text & "', '" & Me.lieu_naiss.Text & "', '" & Me.adresse.Text & "', " & Convert.ToInt32(Me.num_cni.Text) & ", '" & Me.statut.SelectedIndex & "', '" & Me.num_contrat.Text & "', '" & Me.num_ipres.Text & "', '" & Me.dure_contrat.Text & "', '" & Me.date_entre.Text & "', '" & Me.date_sortie.Text & "', " & Convert.ToInt32(Me.honoraire_brut.Text) & ", " & Me.prelevement_fiscal.SelectedIndex), con)
    1