ASP.NET中使用數據處理插入數據注意的問題
很多時候,我們都會習慣將數據庫連接的初始化過程交給Page_Load去做,其實這樣子有好處也有壞處,好處是單邊問題的時候,這種方法很實用,壞處就是遇到多邊的問題時,就種情況這不太好用了!例如下麵的例子:
///ForExample: <scriptlanguage="C#"runat="server"> SqlConnectionmySqlCon; protectedvoidPage_Load(ObjectSrc,EventArgsE) { mySqlCon=newSqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs");//初始化過程 if(!IsPostBack) BindGrid(); } publicvoidAddPublisher(Objectsender,EventArgsE) { StringmyinsertCmd="insertintopublishers(pub_id,pub_name,city,state,country)values(@pubid,@pubname,@city,@state,@country)"; SqlCommandmySqlCom=newSqlCommand(myinsertCmd,mySqlCon);//初始化命令調用 //實現配套 mySqlCom.Parameters.Add(newSqlParameter("@pubid",SqlDbType.Char,4)); mySqlCom.Parameters["@pubid"].Value=Pub_Id.Text; mySqlCom.Parameters.Add(newSqlParameter("@pubname",SqlDbType.VarChar,40)); mySqlCom.Parameters["@pubname"].Value=Pub_Name.Text; mySqlCom.Parameters.Add(newSqlParameter("@city",SqlDbType.VarChar,20)); mySqlCom.Parameters["@city"].Value=City.Text; mySqlCom.Parameters.Add(newSqlParameter("@state",SqlDbType.Char,2)); mySqlCom.Parameters["@state"].Value=State.Text; mySqlCom.Parameters.Add(newSqlParameter("@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=""; City.Text=""; State.Text=""; Country.Text=""; BindGrid(); } //子函數調用 publicvoidBindGrid() { SqlDataAdaptermySqlCom=newSqlDataAdapter("select*frompublisherswherepub_idlike'99%'",mySqlCon); DataSetmyds=newDataSet(); mySqlCom.Fill(myds,"publishers"); dgMyGrid.DataSource=myds.Tables["publishers"].DefaultView;dgMyGrid.DataBind(); } </script> <h2>添加一個新的發行者:</h2> <br/> 發行者ID應以99打頭,並包含4位數字<br/> 發行者ID: <asp:textboxrunat="server"/>姓名: <asp:textboxrunat="server"/> 城市: <asp:textboxrunat="server"/> <br/> 省: <asp:textboxrunat="server"/> 國家: <asp:textboxrunat="server"/> <br/> <br/> <asp:buttonText="提交"OnClick="AddPublisher"runat="server"ID="Button1"/><br/> <spanrunat="server"/> <br/> <asp:DataGridrunat="server"/> |
這樣的例子初初看起來沒有問題,調試也沒報錯,但在生成的頁麵添加數據後提交時就會報錯,說什麼屬性不配套之類的話。是什麼原因造成的呢!其實,這就是初始化過程在頁麵裝載時造成的,但這裏有個問題我始終沒能搞清楚,就是既然是在頁麵初始化過程已經初始化過DB實例了,按道理來講應該可以直接生成套用的啊,但好像沒有!還是要把初始化過程放到具體的函數裏麵才能實現!看下麵:
<<scriptlanguage="C#"runat="server"> protectedvoidPage_Load(ObjectSrc,EventArgsE) { //頁麵裝載過程中直接使用IF語句,其實什麼也不加! if(!IsPostBack) BindGrid(); } publicvoidAddPublisher(Objectsender,EventArgsE) { stringstrprovider="server=localhost;uid=sa;pwd=sa;database=pubs";//構造初始化過程 SqlConnectionmySqlCon=newSqlConnection(strprovider); stringmyinsertCmd="insertintopublishers(pub_id,pub_name,city,state,country)values(@pubid,@pubname,@city,@state,@country)"; SqlCommandmySqlCom=newSqlCommand(myinsertCmd,mySqlCon);//初始化過程實現 mySqlCom.Parameters.Add(newSqlParameter("@pubid",SqlDbType.Char,4)); mySqlCom.Parameters["@pubid"].Value=Pub_Id.Text; mySqlCom.Parameters.Add(newSqlParameter("@pubname",SqlDbType.VarChar,40)); mySqlCom.Parameters["@pubname"].Value=Pub_Name.Text; mySqlCom.Parameters.Add(newSqlParameter("@city",SqlDbType.VarChar,20)); mySqlCom.Parameters["@city"].Value=City.Text; mySqlCom.Parameters.Add(newSqlParameter("@state",SqlDbType.Char,2)); mySqlCom.Parameters["@state"].Value=State.Text; mySqlCom.Parameters.Add(newSqlParameter("@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=""; City.Text=""; State.Text=""; Country.Text=""; BindGrid(); } publicvoidBindGrid()子函數調用時同樣也要初始化DB連接 { stringstrprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs"; SqlConnectionmySqlCon=newSqlConnection(strprovider); SqlDataAdaptermySqlCom=newSqlDataAdapter("select*frompublisherswherepub_idlike'99%'",mySqlCon); DataSetmyds=newDataSet(); mySqlCom.Fill(myds,"publishers"); dgMyGrid.DataSource=myds.Tables["publishers"].DefaultView; dgMyGrid.DataBind(); } </script> <h2>添加一個新的發行者:</h2> <br> 發行者ID應以99打頭,並包含4位數字<br> 發行者ID: <asp:textboxrunat="server"/>姓名: <asp:textboxrunat="server"/> 城市: <asp:textboxrunat="server"/> <br> 省: <asp:textboxrunat="server"/> 國家: <asp:textboxrunat="server"/> <br> <br> <asp:buttonText="提交"OnClick="AddPublisher"runat="server"ID="Button1"/><br> <spanrunat="server"/> <br> <asp:DataGridrunat="server"/> </form>> |
經過這樣修改後,我們才能在真正意義上實現數據的增加!
最後更新:2017-04-02 00:06:36