Muitas vezes, estamos acostumados a deixar o processo de inicialização da conexão com o banco de dados para Page_Load. Na verdade, isso tem vantagens e desvantagens é que este método é muito prático quando se deparam com problemas unilaterais. Isso não é muito útil nesta situação! Por exemplo:
/// Por exemplo:
<script language="C#" runat="server">
SqlConnection mySqlCon;
Page_Load nulo protegido (Object Src, EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); //Processo de inicialização
se (!IsPostBack)
BindGrid();
}
public void AddPublisher (remetente do objeto, EventArgs E)
{
String myinsertCmd = "inserir nos valores dos editores (pub_id, pub_name, cidade, estado, país) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon);
//Conseguir correspondência
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("@cidade", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@cidade"].Value = Cidade.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["@país"].Value = País.Text;
//Abre o banco de dados
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Registro adicionado</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Cidade.Text= "";
Estado.Text = "";
País.Text = "";
BindGrid();
}
//Chamada de subfunção
public void BindGrid()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("selecione * dos editores onde pub_id gosta de '99%'", mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "editores");
dgMyGrid.DataSource = myds.Tables["publicadores"].DefaultView;
}
</script>
<h2>Adicionar um novo editor:</h2>
<br/>
O ID do emissor deve começar com 99 e conter quatro dígitos<br/>
ID do emissor:
<asp:textbox id="Pub_Id" runat="server" />Nome:
<asp:textbox id="Nome_Pub" runat="servidor" />
Cidade:
<asp:textbox id="Cidade" runat="servidor" />
<br/>
Província:
<asp:textbox id="Estado" runat="servidor" />
País:
<asp:textbox id="País" runat="servidor" />
<br/>
<br/>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br/>
<span id="Mensagem" runat="servidor" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
Este exemplo parece estar correto à primeira vista e nenhum erro é relatado durante a depuração. No entanto, após adicionar dados à página gerada, um erro será relatado quando. enviando, dizendo que os atributos não correspondem. Qual é a causa? Na verdade, isso é causado pelo processo de inicialização quando a página é carregada, mas há um problema aqui que nunca consegui descobrir, ou seja, como a instância do banco de dados foi inicializada durante o processo de inicialização da página, ela deveria seria possível gerar diretamente o aplicativo, mas parece que não! Ainda é necessário colocar o processo de inicialização em uma função específica para alcançá-lo! Veja abaixo:
<<linguagem de script="C#" runat="servidor">
Page_Load nulo protegido (Object Src, EventArgs E)
{
//A instrução IF é usada diretamente durante o carregamento da página. Na verdade, nada é adicionado!
se (!IsPostBack)
BindGrid();
}
public void AddPublisher (remetente do objeto, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs" //Constrói o processo de inicialização
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="inserir nos valores dos editores (pub_id, pub_name, cidade, estado, país) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); //Implementação do processo de inicialização;
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("@cidade", SqlDbType.VarChar, 20));
mySqlCom.Parameters["@cidade"].Value = Cidade.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["@país"].Value = País.Text;
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Registro adicionado</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
Cidade.Text= "";
Estado.Text = "";
País.Text = "";
BindGrid();
}
Ao chamar a subfunção public void BindGrid(), a conexão do banco de dados também deve ser inicializada.
{
string strprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("selecione * dos editores onde pub_id gosta de '99%'",mySqlCon);
DataSet myds = new DataSet();
mySqlCom.Fill(myds, "editores");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>Adicionar um novo editor:</h2>
<br>
O ID do emissor deve começar com 99 e conter quatro dígitos<br>
ID do emissor:
<asp:textbox id="Pub_Id" runat="server" />Nome:
<asp:textbox id="Nome_Pub" runat="servidor" />
Cidade:
<asp:textbox id="Cidade" runat="servidor" />
<br>
Província:
<asp:textbox id="Estado" runat="servidor" />
País:
<asp:textbox id="País" runat="servidor" />
<br>
<br>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br>
<span id="Mensagem" runat="servidor" />
<br>
<asp:DataGrid id="dgMyGrid" runat="servidor" />
</form>>
Após tal modificação, podemos conseguir o aumento de dados no sentido real! Mas também tentei excluir e atualizar os dados. Quando a página foi carregada, foi atribuído diretamente o atributo de inicialização do banco de dados, mas não houve problema. Se alguém souber, por favor me avise! Obrigado:)