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