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

Fermé
Doom_aok Messages postés 46 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 18 février 2008 - 25 oct. 2007 à 00:28
 ramzi - 29 avril 2010 à 19:27
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

5 réponses

ya aussi une erreur dans la requete "insert client values..."
insert into client...
6
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
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
donc pour insérer le donnée dans la base de donnée a partir d'un formulaire

avec .net
2
remplacez "Dim affectedrows As Integer = cmd.ExecuteNonQuery()" par cmd.ExecuteNonQuery()
1

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

Posez votre question
alyakin Messages postés 2 Date d'inscription samedi 5 septembre 2009 Statut Membre Dernière intervention 9 octobre 2009
9 oct. 2009 à 12:35
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