falcon16
Messages postés6Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention11 juin 2005
-
22 mai 2005 à 21:22
falcon16
Messages postés6Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention11 juin 2005
-
23 mai 2005 à 12:03
Salut à tous,
bon j'en viens à vous parce que après une aprem complète à plancher là dessus, je n'y comprends plus rien ...
J'explique mon problème. J'ai une table qui s'appelle Avenant, et qui contient 5 champs :
la clé primaire, nom du champ : i_avIndex, type int, taille 4 octets
un entier, i_avCode, type int, taille 4 octets
un libellé, s_avLibelle, type varchar, longueur 50
un entier, i_avModifPar, type int, longueur 4
une date, d_avModifLe, type datetime, longueur 8
j'affiche cette table dans un datagrid via un dataset et un sqldataadapter ( la table est dans une base sous MS SQL Server 2000 )
Pour le select, l'insert et le delete tout va bien, mais pour l'update j'ai une erreur de type sql : erreur de syntaxe près de 'update'
// code d'instantiation des objets
this.m_sqlDataAdapter = new SqlDataAdapter();
this.m_strTable = "Avenant";
this.m_sqlCmdSelect = new SqlCommand("SELECT i_avIndex, i_avCode AS Code, s_avLibelle AS Libellé FROM Avenant;",this.m_sqlConnect);
this.m_sqlCmdSelect.CommandType = CommandType.Text;
this.m_sqlCmdInsert new SqlCommand("INSERT INTO Avenant( i_avCode, s_avLibelle, i_avModifPar, d_avModifLe ) VALUES (@i_avCode, @s_avLibelle, " + this.m_iIdUser + ", '" + System.DateTime.Now + "' ); SELECT i_avIndex, i_avCode AS Code, s_avLibelle AS Libellé FROM Avenant WHERE i_avIndex @@IDENTITY;",this.m_sqlConnect);
this.m_sqlCmdInsert.Parameters.Add(new SqlParameter("@i_avCode", SqlDbType.Int, 4, "Code"));
this.m_sqlCmdInsert.Parameters.Add(new SqlParameter("@s_avLibelle", SqlDbType.VarChar, 50, "Libellé"));
this.m_sqlCmdUpdate new SqlCommand(@"UDPATE Avenant SET i_avCode @i_avCode, s_avLibelle = @s_avLibelle, i_avModifPar = " + this.m_iIdUser + ", d_avModifLe = '" + System.DateTime.Now + "' WHERE i_avIndex = @Original_i_avIndex; SELECT i_avIndex, i_avCode AS Code, s_avLibelle AS Libellé FROM Avenant WHERE i_avIndex = @i_avIndex;",this.m_sqlConnect);
this.m_sqlCmdUpdate.Parameters.Add(new SqlParameter("@i_avCode", SqlDbType.Int, 4, "Code"));
this.m_sqlCmdUpdate.Parameters.Add(new SqlParameter("@s_avLibelle", SqlDbType.VarChar, 50, "Libellé"));
this.m_sqlCmdUpdate.Parameters.Add(new SqlParameter("@Original_i_avIndex", SqlDbType.Int, 4, ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "i_avIndex", DataRowVersion.Original, null));
this.m_sqlCmdUpdate.Parameters.Add(new SqlParameter("@i_avIndex", SqlDbType.Int, 4, "i_avIndex"));
this.m_sqlCmdDelete new SqlCommand("DELETE FROM Avenant WHERE i_avIndex @i_avIndex", this.m_sqlConnect);
this.m_sqlCmdDelete.Parameters.Add(new SqlParameter("@i_avIndex", SqlDbType.Int, 4, "i_avIndex"));
this.m_sqlDataAdapter.TableMappings.AddRange(new DataTableMapping[] {new DataTableMapping("Table",this.m_strTable,new DataColumnMapping[] { new DataColumnMapping("i_avIndex", "i_avIndex"), new DataColumnMapping("Code", "Code"), new DataColumnMapping("Libellé", "Libellé") })});
//on utilise le dataadapter pour remplir le dataset
//on attribue la command au SelectCommand
this.m_sqlDataAdapter.SelectCommand = this.m_sqlCmdSelect;
this.m_sqlDataAdapter.UpdateCommand = this.m_sqlCmdUpdate;
this.m_sqlDataAdapter.InsertCommand = this.m_sqlCmdInsert;
this.m_sqlDataAdapter.DeleteCommand = this.m_sqlCmdDelete;
//on construit le dataset
this.m_ds = new DataSet(this.m_strTable);
((System.ComponentModel.ISupportInitialize)(this.m_ds)).BeginInit();
this.m_ds.DataSetName = "m_ds";
this.m_ds.Locale = new System.Globalization.CultureInfo("fr-FR");
this.m_ds.Clear();
//On rempli le dataset
this.m_sqlDataAdapter.Fill(this.m_ds,this.m_strTable);
// on masque la 1ere colonne qui correspond à l'index SQL
this.m_ds.Tables[this.m_strTable].Columns[0].ColumnMapping = MappingType.Hidden;
//on affecte le datasource du datagrid afin de visualiser les données
this.DataSource = this.m_ds.Tables[this.m_strTable];
// code utilisé pour mettre à jour après modifications
public bool Recharger()
{
bool l_bRet;
try
{
this.m_sqlDataAdapter.Update(this.m_ds, this.m_strTable);
l_bRet = true;
}
catch( SqlException ex )
{
switch (ex.Number)
{
case 547: MessageBox.Show("Vous ne pouvez supprimer cette valeur car elle est actuellement utilisée dans la base","Erreur",MessageBoxButtons.OK,MessageBoxIcon.Error);
break;
J'ai testé en créant tout à l'aide du designer de Visual ( vu que j'ai pompé ce code en fait ) et j'ai exactement la même chose, sauf que ça marche alors que mon code ne marche pas ... :'(
Merci d'avance de vos réponses ..
stampeed
Messages postés22Date d'inscriptionvendredi 1 août 2003StatutMembreDernière intervention28 novembre 2006 23 mai 2005 à 09:28
bon c'est bon laissez tomber ...
j'ai ajouté le dataset, et le dataadpater à partir du designer et j'ai
un poil retouché les requêtes et c'est bon ça marche, mais c'est à n'y
rien comprendre ...