Muchas veces estamos acostumbrados a dejar el proceso de inicialización de la conexión de la base de datos en Page_Load. De hecho, esto tiene ventajas y desventajas. La ventaja es que este método es muy práctico cuando se encuentra con problemas unilaterales. ¡Esto no es muy útil en esta situación! Por ejemplo:
/// Por ejemplo:
<script language="C#" runat="server">
SqlConnection mySqlCon;
vacío protegido Page_Load (Object Src, EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); //Proceso de inicialización
si (!IsPostBack)
VincularGrid();
}
public void AddPublisher (remitente del objeto, EventArgs E)
{
String myinsertCmd = "insertar en los valores de los editores (pub_id, pub_name, ciudad, estado, país) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon); //Llamada al comando de inicialización;
//Lograr coincidencia
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"].Valor = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Valor = Ciudad.Texto;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Valor = Estado.Texto;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Valor = País.Texto;
//Abrir base de datos
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Registro agregado</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Ciudad.Texto= "";
Estado.Texto = "";
País.Texto = "";
VincularGrid();
}
// Llamada a subfunción
BindGrid público vacío()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("seleccione * de los editores donde pub_id es como '99%'", mySqlCon);
Conjunto de datos myds = nuevo conjunto de datos();
mySqlCom.Fill(myds, "editores");
dgMyGrid.DataSource = myds.Tables["editores"].DefaultView;dgMyGrid.DataBind();
}
</script>
<h2>Agregar un nuevo editor:</h2>
<br/>
El ID del emisor debe comenzar con 99 y contener 4 dígitos<br/>
ID del emisor:
<asp:textbox id="Pub_Id" runat="servidor" />Nombre:
<asp:textbox id="Pub_Name" runat="servidor" />
Ciudad:
<asp:textbox id="Ciudad" runat="servidor" />
<br/>
Provincia:
<asp:textbox id="Estado" runat="servidor" />
País:
<asp:textbox id="País" runat="servidor" />
<br/>
<br/>
<asp:botón Texto="Enviar" OnClick="AddPublisher" runat="servidor" ID="Botón1" /><br/>
<span id="Mensaje" runat="servidor" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
Este ejemplo parece estar bien a primera vista y no se informa ningún error durante la depuración. Sin embargo, después de agregar datos a la página generada, se informará un error cuando. enviando, diciendo que los atributos no coinciden Algo así. ¿Cuál es la causa? De hecho, esto se debe al proceso de inicialización cuando se carga la página, pero hay un problema aquí que nunca he podido resolver, es decir, dado que la instancia de base de datos se inicializó durante el proceso de inicialización de la página, debería Sería posible generar directamente la aplicación, ¡pero parece que no! ¡Aún es necesario poner el proceso de inicialización en una función específica para lograrlo! Vea abajo:
<<script language="C#" runat="servidor">
vacío protegido Page_Load (Object Src, EventArgs E)
{
// La declaración IF se usa directamente durante la carga de la página. De hecho, ¡no se agrega nada!
si (!IsPostBack)
VincularGrid();
}
public void AddPublisher (remitente del objeto, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs" //Construir el proceso de inicialización
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="insertar en los valores de los editores (id_pub, nombre_pub, ciudad, estado, país) (@pubid,@pubname,@ciudad,@estado,@país)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); //Implementación del proceso de inicialización;
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"].Valor = Pub_Name.Text;
mySqlCom.Parameters.Add(new SqlParameter("@city", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@city"].Valor = Ciudad.Texto;
mySqlCom.Parameters.Add(new SqlParameter("@state", SqlDbType.Char, 2));
mySqlCom.Parameters["@state"].Valor = Estado.Texto;
mySqlCom.Parameters.Add(new SqlParameter("@country",SqlDbType.VarChar, 30));
mySqlCom.Parameters["@country"].Valor = País.Texto;
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Registro agregado</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Ciudad.Texto= "";
Estado.Texto = "";
País.Texto = "";
VincularGrid();
}
Al llamar a la subfunción public void BindGrid(), la conexión de base de datos también debe inicializarse.
{
string strprovider="servidor=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("seleccione * de los editores donde pub_id es como '99%'",mySqlCon);
Conjunto de datos myds = nuevo conjunto de datos();
mySqlCom.Fill(myds, "editores");
dgMyGrid.DataSource = myds.Tables["editores"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>Agregar un nuevo editor:</h2>
<br>
El ID del emisor debe comenzar con 99 y contener 4 dígitos<br>
ID del emisor:
<asp:textbox id="Pub_Id" runat="servidor" />Nombre:
<asp:textbox id="Pub_Name" runat="servidor" />
Ciudad:
<asp:textbox id="Ciudad" runat="servidor" />
<br>
Provincia:
<asp:textbox id="Estado" runat="servidor" />
País:
<asp:textbox id="País" runat="servidor" />
<br>
<br>
<asp:botón Texto="Enviar" OnClick="AddPublisher" runat="servidor" ID="Botón1" /><br>
<span id="Mensaje" runat="servidor" />
<br>
<asp:DataGrid id="dgMyGrid" runat="servidor" />
</form>> ¡
Después de dicha modificación, podemos lograr el aumento de datos en un sentido real! Pero también intenté eliminar y actualizar los datos. Cuando se cargó la página, se le asignó directamente el atributo de base de datos de inicialización, pero no hubo ningún problema. Si alguien lo sabe, ¡avíseme! Gracias:)