Oft sind wir es gewohnt, den Initialisierungsprozess der Datenbankverbindung Page_Load zu überlassen. Der Vorteil besteht darin, dass diese Methode bei einseitigen Problemen sehr praktisch ist. Dies ist in dieser Situation nicht sehr nützlich! Zum Beispiel:
/// Zum Beispiel:
<script language="C#" runat="server">
SqlConnection mySqlCon;
protected void Page_Load(Object Src,EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); //Initialisierungsprozess
if (!IsPostBack)
BindGrid();
}
public void AddPublisher(Object sender, EventArgs E)
{
String myinsertCmd = „In Verlagswerte (pub_id, pub_name, Stadt, Bundesstaat, Land) einfügen (@pubid,@pubname,@city,@state,@country)“;
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon); //Initialisierungsbefehlsaufruf
//Matching erreichen
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;
//Datenbank öffnen
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Datensatz hinzugefügt</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Stadt.Text= "";
State.Text = "";
Country.Text = "";
BindGrid();
}
//Unterfunktionsaufruf
public void BindGrid()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("wählen Sie * aus Herausgebern aus, bei denen pub_id wie '99%' ist", mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "publishers");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView dgMyGrid.DataBind();
}
</script>
<h2>Neuen Herausgeber hinzufügen:</h2>
<br/>
Die Aussteller-ID sollte mit 99 beginnen und 4 Ziffern enthalten<br/>
Aussteller-ID:
<asp:textbox id="Pub_Id" runat="server" />Name:
<asp:textbox id="Pub_Name" runat="server" />
Stadt:
<asp:textbox id="City" runat="server" />
<br/>
Provinz:
<asp:textbox id="State" runat="server" />
Land:
<asp:textbox id="Country" runat="server" />
<br/>
<br/>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br/>
<span id="Message" runat="server" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
Dieses Beispiel scheint auf den ersten Blick in Ordnung zu sein und beim Debuggen wird kein Fehler gemeldet. Nach dem Hinzufügen von Daten zur generierten Seite wird jedoch ein Fehler gemeldet einreichen und sagen, dass die Attribute nicht übereinstimmen. Was ist die Ursache? Tatsächlich wird dies durch den Initialisierungsprozess beim Laden der Seite verursacht, aber hier gibt es ein Problem, das ich nie herausfinden konnte, das heißt, da die DB-Instanz während des Seiteninitialisierungsprozesses initialisiert wurde, sollte dies der Fall sein möglich sein, die Anwendung direkt zu generieren, aber es scheint nicht! Um dies zu erreichen, ist es immer noch notwendig, den Initialisierungsprozess in eine bestimmte Funktion zu integrieren! Siehe unten:
<<script language="C#" runat="server">
protected void Page_Load(Object Src,EventArgs E)
{
//Die IF-Anweisung wird direkt beim Laden der Seite verwendet. Tatsächlich wird nichts hinzugefügt!
if (!IsPostBack)
BindGrid();
}
public void AddPublisher(Object sender, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs"; //Konstruieren Sie den Initialisierungsprozess
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="in Verlage (pub_id, pub_name, Stadt, Bundesstaat, Land) Werte einfügen (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); //Initialisierungsprozessimplementierung
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;
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Datensatz hinzugefügt</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Stadt.Text= "";
State.Text = "";
Country.Text = "";
BindGrid();
}
Beim Aufruf der Unterfunktion public void BindGrid() muss auch die DB-Verbindung initialisiert werden.
{
string strprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("wählen Sie * aus Herausgebern aus, bei denen pub_id wie '99%' lautet",mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "publishers");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>Neuen Herausgeber hinzufügen:</h2>
<br>
Die Aussteller-ID sollte mit 99 beginnen und 4 Ziffern enthalten<br>
Aussteller-ID:
<asp:textbox id="Pub_Id" runat="server" />Name:
<asp:textbox id="Pub_Name" runat="server" />
Stadt:
<asp:textbox id="City" runat="server" />
<br>
Provinz:
<asp:textbox id="State" runat="server" />
Land:
<asp:textbox id="Country" runat="server" />
<br>
<br>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br>
<span id="Message" runat="server" />
<br>
<asp:DataGrid id="dgMyGrid" runat="server" />
</form>>
Nach einer solchen Änderung können wir die Datenmenge im wahrsten Sinne des Wortes steigern! Ich habe aber auch versucht, die Daten zu löschen und zu aktualisieren, aber es gab kein Problem. Wenn jemand es weiß, sagen Sie mir bitte Bescheid. Danke:)