우리는 데이터베이스 연결의 초기화 프로세스를 Page_Load에 맡기는 데 익숙합니다. 실제로 이 방법은 일방적인 문제가 발생할 때 매우 실용적이라는 장점이 있습니다. 이 상황에서는 그다지 유용하지 않습니다! 예:
/// 예:
<script 언어="C#" runat="server">
SqlConnection mySqlCon;
protected void Page_Load(Object Src,EventArgs E)
{
mySqlCon=new SqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs") //초기화 프로세스
if (!IsPostBack)
바인드그리드();
}
공개 무효 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"].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;
//DB 오픈
mySqlCom.Connection.Open();
mySqlCom.ExecuteNonQuery();
Message.InnerHtml = "<b>기록이 추가되었습니다</b><br/>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
도시.텍스트= "";
State.Text = "";
국가.텍스트 = "";
바인드그리드();
}
//하위 함수 호출
공공 무효 BindGrid()
{
SqlDataAdapter mySqlCom = new SqlDataAdapter("pub_id가 '99%'와 같은 게시자에서 * 선택", mySqlCon);
DataSet myds = 새로운 DataSet();
mySqlCom.Fill(myds, "게시자");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultViewdgMyGrid.DataBind();
}
</script>
<h2>새 게시자 추가:</h2>
<br/>
발급자 ID는 99로 시작하고 4자리 숫자를 포함해야 합니다.<br/>
발급자 ID:
<asp:textbox id="Pub_Id" runat="server" />이름:
<asp:textbox id="Pub_Name" runat="서버" />
도시:
<asp:textbox id="City" runat="서버" />
<br/>
주:
<asp:textbox id="State" runat="서버" />
국가:
<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" />
이 예제는 얼핏 보면 괜찮은 것처럼 보이며 디버깅 중에 오류가 보고되지 않습니다. 그러나 생성된 페이지에 데이터를 추가한 후에는 오류가 보고됩니다. 속성이 일치하지 않는다고 제출하는 것입니다. 원인은 무엇입니까? 사실 이는 페이지가 로드될 때 초기화 과정에서 발생하는 현상인데, 여기에는 제가 전혀 파악하지 못한 문제가 있습니다. 즉, 페이지 초기화 과정에서 DB 인스턴스가 초기화되었기 때문에 애플리케이션을 직접 생성할 수도 있지만 그렇지 않은 것 같습니다. 이를 달성하려면 초기화 프로세스를 특정 기능에 넣는 것이 여전히 필요합니다! 아래를 참조하세요:
<<스크립트 언어="C#" runat="서버">
protected void Page_Load(Object Src,EventArgs E)
{
//IF 문은 페이지 로딩 중에 직접 사용됩니다. 실제로는 아무것도 추가되지 않습니다.
if (!IsPostBack)
바인드그리드();
}
공개 무효 AddPublisher(개체 전송자, EventArgs E)
{
string strprovider="server=localhost;uid=sa;pwd=sa;database=pubs"; //초기화 프로세스 구성
SqlConnection mySqlCon=new SqlConnection(strprovider);
string myinsertCmd ="게시자( pub_id, pub_name, city, state, country ) 값에 삽입 (@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"].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>기록이 추가되었습니다</b><br>";
mySqlCom.Connection.Close();
Pub_Id.Text = "";
Pub_Name.Text = "";
도시.텍스트= "";
상태.텍스트 = "";
국가.텍스트 = "";
바인드그리드();
}
public void BindGrid() 하위 함수 호출 시 DB 연결도 초기화되어야 합니다.
{
문자열 strprovider="서버=dev;uid=sa;pwd=pauperboyboy;database=pubs";
SqlConnection mySqlCon=new SqlConnection(strprovider);
SqlDataAdapter mySqlCom = new SqlDataAdapter("pub_id가 '99%'인 게시자에서 * 선택",mySqlCon);
DataSet myds = 새로운 DataSet();
mySqlCom.Fill(myds, "게시자");
dgMyGrid.DataSource = myds.Tables["publishers"].DefaultView;
dgMyGrid.DataBind();
}
</script>
<h2>새 게시자 추가:</h2>
<br>
발급기관 ID는 99로 시작하고 4자리 숫자를 포함해야 합니다<br>
발급자 ID:
<asp:textbox id="Pub_Id" runat="server" />이름:
<asp:textbox id="Pub_Name" runat="서버" />
도시:
<asp:textbox id="City" runat="서버" />
<br>
주:
<asp:textbox id="State" runat="서버" />
국가:
<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="서버" />
</form>>
이렇게 수정하면 실질적인 데이터 증가를 달성할 수 있습니다! 그런데 데이터 삭제 및 업데이트도 해봤는데, 페이지 로딩시 초기화 DB 속성이 바로 할당됐는데, 이유를 아시는 분 계시면 알려주세요! 감사해요:)