Souvent, nous avons l'habitude de laisser le processus d'initialisation de la connexion à la base de données à Page_Load. En fait, cela présente des avantages et des inconvénients. L'avantage est que cette méthode est très pratique lorsque l'on rencontre des problèmes unilatéraux. Ce n'est pas très utile dans cette situation ! Par exemple :
/// Par exemple :
<script language="C#" runat="server">
SqlConnection mySqlCon ;
Page_Load vide protégé (Object Src, EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); //Processus d'initialisation
si (!IsPostBack)
BindGrid();
}
public void AddPublisher (expéditeur d'objet, EventArgs E)
{
String myinsertCmd = "insérer dans les valeurs des éditeurs (pub_id, pub_name, ville, état, pays) (@pubid,@pubname,@city,@state,@country)" ;
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon); //Appel de commande d'initialisation
//Réaliser la correspondance
mySqlCom.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(new SqlParameter("@pubname", SqlDbType.VarChar, 40));
mySqlCom.Parameters["@pubname"].Value = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Value = City.Text;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Value = State.Text;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Value = Country.Text;
//Ouvrir la base de données
monSqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Enregistrement ajouté</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "" ;
Pub_Name.Text = "" ;
Ville.Text= "";
État.Texte = "" ;
Pays.Texte = "" ;
BindGrid();
}
//Appel de sous-fonction
public vide BindGrid()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * from editors which pub_id like '99%'", mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "éditeurs");
dgMyGrid.DataSource = myds.Tables["éditeurs"].DefaultView; dgMyGrid.DataBind();
}
</script>
<h2>Ajouter un nouvel éditeur :</h2>
<br/>
L'ID de l'émetteur doit commencer par 99 et contenir 4 chiffres<br/>
ID de l'émetteur :
<asp:textbox id="Pub_Id" runat="server" />Nom :
<asp:textbox id="Pub_Name" runat="server" />
Ville :
<asp:textbox id="Ville" runat="serveur" />
<br/>
Province :
<asp:textbox id="State" runat="server" />
Pays :
<asp:textbox id="Pays" runat="server" />
<br/>
<br/>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br/>
<span id="Message" runat="serveur" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
Cet exemple semble correct à première vue, et aucune erreur n'est signalée lors du débogage. Cependant, après avoir ajouté des données à la page générée, une erreur sera signalée lorsque. soumettre, disant que les attributs ne correspondent pas. Quelque chose comme ça. Quelle est la cause ? En fait, cela est dû au processus d'initialisation lors du chargement de la page, mais il y a ici un problème que je n'ai jamais pu comprendre, c'est-à-dire que puisque l'instance de base de données a été initialisée pendant le processus d'initialisation de la page, elle devrait être possible de générer directement l'application, mais il semble que non ! Encore faut-il mettre le processus d'initialisation dans une fonction spécifique pour y parvenir ! Voir ci-dessous:
<<langage de script="C#" runat="serveur">
Page_Load vide protégé (Object Src, EventArgs E)
{
//L'instruction IF est utilisée directement lors du chargement de la page. En fait, rien n'est ajouté !
si (!IsPostBack)
BindGrid();
}
public void AddPublisher (expéditeur d'objet, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs" //Construire le processus d'initialisation;
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="insérer dans les valeurs des éditeurs (pub_id, pub_name, city, state, country) (@pubid,@pubname,@city,@state,@country)" ;
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); //Implémentation du processus d'initialisation;
mySqlCom.Parameters.Add(new SqlParameter("@pubid", SqlDbType.Char, 4));
mySqlCom.Parameters["@pubid"].Value = Pub_Id.Text;
mySqlCom.Parameters.Add(new SqlParameter("@pubname", SqlDbType.VarChar, 40));
mySqlCom.Parameters["@pubname"].Value = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Value = City.Text;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Value = State.Text;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Value = Country.Text;
monSqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Enregistrement ajouté</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "" ;
Pub_Name.Text = "" ;
Ville.Text= "";
État.Texte = "" ;
Pays.Texte = "" ;
BindGrid();
}
Lors de l’appel de la sous-fonction public void BindGrid(), la connexion DB doit également être initialisée.
{
string strprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("select * from editors which pub_id like '99%'",mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "éditeurs");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>Ajouter un nouvel éditeur :</h2>
<br>
L'ID de l'émetteur doit commencer par 99 et contenir 4 chiffres<br>
ID de l'émetteur :
<asp:textbox id="Pub_Id" runat="server" />Nom :
<asp:textbox id="Pub_Name" runat="server" />
Ville :
<asp:textbox id="Ville" runat="serveur" />
<br>
Province :
<asp:textbox id="State" runat="server" />
Pays :
<asp:textbox id="Pays" runat="server" />
<br>
<br>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br>
<span id="Message" runat="serveur" />
<br>
<asp:DataGrid id="dgMyGrid" runat="server" />
</form>>
Après une telle modification, nous pouvons obtenir une augmentation réelle des données ! Mais j'ai également essayé de supprimer et de mettre à jour les données. Lorsque la page a été chargée, l'attribut DB d'initialisation lui a été directement attribué, mais il n'y a eu aucun problème. Si quelqu'un le sait, prévenez-moi ! Merci:)