Во многих случаях мы привыкли оставлять процесс инициализации подключения к базе данных Page_Load. На самом деле, это имеет свои преимущества и недостатки. Преимущество этого метода заключается в том, что этот метод очень практичен при возникновении односторонних проблем. В данной ситуации это не очень полезно! Например:
/// Например:
<script Language="C#" runat="server">
SqlConnection mySqlCon;
защищенная пустота Page_Load (Object Src, EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs"); //Процесс инициализации
если (!IsPostBack)
БиндГрид();
}
public void AddPublisher (отправитель объекта, EventArgs E)
{
String myinsertCmd = "вставить в значения издателей (pub_id, pub_name, город, штат, страна) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd, mySqlCon); //вызов команды инициализации;
//Достигаем совпадения
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"].Значение = 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"].Значение = Country.Text;
//Открыть БД
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Запись добавлена</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Имя_публикации.Текст = "";
Город.Текст = "";
Состояние.Текст = "";
Страна.Текст = "";
БиндГрид();
}
//Вызов подфункции
публичная пустота BindGrid()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("выберите * из издателей, где pub_id имеет значение '99%'", mySqlCon);
DataSet myds = новый DataSet();
mySqlCom.Fill(myds, "издатели");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView; dgMyGrid.DataBind();
}
</скрипт>
<h2>Добавить нового издателя:</h2>
<br/>
Идентификатор эмитента должен начинаться с цифры 99 и содержать 4 цифры<br/>
Идентификатор эмитента:
<asp:textbox id="Pub_Id" runat="server" />Имя:
<asp:textbox id="Pub_Name" runat="server" />
Город:
<asp:textbox id="Город" runat="сервер" />
<br/>
Провинция:
<asp:textbox id="State" runat="server" />
Страна:
<asp:textbox id="Страна" runat="сервер" />
<br/>
<br/>
<asp:button Text="Отправить" OnClick="AddPublisher" runat="server" ID="Button1" /><br/>
<span id="Сообщение" runat="сервер" />
<br/>
<asp:DataGrid id="dgMyGrid" runat="server" />
На первый взгляд этот пример кажется нормальным, и во время отладки не сообщается об ошибках. Однако после добавления данных на сгенерированную страницу будет сообщено об ошибке. отправляю, говорю, что атрибуты не совпадают. Что-то в этом роде. В чем причина? На самом деле это вызвано процессом инициализации при загрузке страницы, но здесь есть проблема, которую мне так и не удалось выяснить, то есть, поскольку экземпляр БД был инициализирован в процессе инициализации страницы, он должен можно напрямую сгенерировать приложение, но, похоже, нет! Для этого все равно необходимо поместить процесс инициализации в конкретную функцию! См. ниже:
<<script Language="C#" runat="server">
защищенная пустота Page_Load (Object Src, EventArgs E)
{
//Инструкция IF используется непосредственно во время загрузки страницы. На самом деле ничего не добавляется!
если (!IsPostBack)
БиндГрид();
}
public void AddPublisher (отправитель объекта, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs" //Создаем процесс инициализации;
SqlConnection mySqlCon = новый SqlConnection (strprovider);
string myinsertCmd ="вставить в значения издателей ( pub_id, pub_name, город, штат, страна) (@pubid,@pubname,@city,@state,@country)";
SqlCommand mySqlCom = new SqlCommand(myinsertCmd,mySqlCon); //Реализация процесса инициализации
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"].Значение = 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"].Значение = Country.Text;
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>Запись добавлена</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Имя_публикации.Текст = "";
Город.Текст = "";
Состояние.Текст = "";
Страна.Текст = "";
БиндГрид();
}
При вызове подфункции public void BindGrid() также необходимо инициализировать соединение с БД.
{
string strprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon = новый SqlConnection (strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("выберите * из издателей, где pub_id имеет значение '99%'",mySqlCon);
DataSet myds = новый DataSet();
mySqlCom.Fill(myds, "издатели");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</скрипт>
<h2>Добавить нового издателя:</h2>
<br>
Идентификатор эмитента должен начинаться с цифры 99 и содержать 4 цифры<br>
Идентификатор эмитента:
<asp:textbox id="Pub_Id" runat="server" />Имя:
<asp:textbox id="Pub_Name" runat="server" />
Город:
<asp:textbox id="Город" runat="сервер" />
<br>
Провинция:
<asp:textbox id="State" runat="server" />
Страна:
<asp:textbox id="Страна" runat="сервер" />
<br>
<br>
<asp:button Text="Submit" OnClick="AddPublisher" runat="server" ID="Button1" /><br>
<span id="Сообщение" runat="сервер" />
<br>
<asp:DataGrid id="dgMyGrid" runat="server" />
</form>>
После такой модификации мы можем добиться реального увеличения данных! Но я также пробовал удалять и обновлять данные. При загрузке страницы ей напрямую был присвоен атрибут БД инициализации, но не было никаких проблем, если кто-нибудь знает, пожалуйста, сообщите! Спасибо:)