ASP.Net中用DataGrid運算元據庫
宣告:本文中的內容來自網路,但經過我自己的整理、驗證,有些內容無法宣告來源,請原作者諒解。
在asp.net中運算元據庫常用DataGrid,本文將常用的方法進行了彙編,適合初學者。
、使用DataGrid控制元件顯示資料庫中的內容:
新增引用
using System.Data.SqlClient;
// 在此處放置使用者程式碼以初始化頁面
//DataGrid控制元件改名為MyDataGrid
// 在Page_Load中新增如下程式碼:
String selectCmd = "select * from OA_Userlogo";
SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "OA_Userlogo");
MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;
MyDataGrid.DataBind();
、在DataGrid中使用引數查詢:
//加入Text控制元件和按鈕控制元件,在按鈕中輸入以下內容
String selectCmd = "select * from OA_Userlogo where 密碼 = @密碼";
SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密碼", SqlDbType.VarChar, 50));
//SqlDbType.Varchar 為表OA_Userlogo中的第三個欄位, Varchar必須與資料庫中的欄位//型別一致,50為第三個欄位的長度
myCommand.SelectCommand.Parameters["@密碼"].Value = TextBox1.Text;
DataSet ds = new DataSet();
myCommand.Fill(ds, "OA_Userlogo");
MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;
MyDataGrid.DataBind();
、將資料連線資訊放在Global.asax檔案中
在Global.asax檔案中加入引用
using System.Data.SqlClient;
在 Session_Start 事件中加入以下程式碼:
protected void Session_Start(Object sender, EventArgs e)
{ string f="server=chaoming;uid=sa;database=Mytest";
SqlConnection NowConn1 = new SqlConnection(f);//連至Mytest資料庫
Session["NowSQLNor"]=NowConn1;
}
在aspx檔案中進行如下修改:
String selectCmd = "select * from OA_Userlogo where 密碼 = @密碼";
//這裡是引用的關鍵:
SqlConnection myConnection = (SqlConnection)Session["NowSQLNor"];
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密碼", SqlDbType.VarChar, 50));
myCommand.SelectCommand.Parameters["@密碼"].Value = TextBox1.Text;
DataSet ds = new DataSet();
myCommand.Fill(ds, "OA_Userlogo");
MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;
MyDataGrid.DataBind();
本例將資料庫連線作為共享的Session物件,相當實用,Web應用系統其他需獲得資料庫的位置,就不必開啟資料庫,只要直接獲得已製作完成的Session即可.
、插入資料
SqlConnection myConnection;//定義一個空連線,不能少
protected void Page_Load(Object Src, EventArgs E)
{ //在頁的初始化中加入連線內容
myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");//連線字串
if (!IsPostBack) //第一次載入本頁時執行BindGrid()函式
BindGrid(); //在DataGrid控制元件中顯示資料庫中的資料
}
/*IsPostBack Page頁屬性, 表示獲取一個值,該值指示該頁是否正為響應客戶端回發而載入,或者它是否正被首次載入和訪問。
屬性值:如果是為響應客戶端回發而載入該頁,則為 true;否則為 false。
*/
public void BindGrid()
{
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");//將資料填充到記憶體中的表Authors,也可用其他名
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();
}
public void AddAuthor_Click(Object sender, EventArgs E)
{
Message.InnerHtml = "";//錯誤提示
if (Page.IsValid) //獲取一個值,該值指示頁驗證是否成功,詳細說明見後
{ //將資料庫中的欄位與變數連線起來,
String insertCmd = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)";
SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));
// SqlDbType.NvarChar表示資料庫中au_id欄位的型別,11表示長度,以下類似
myCommand.Parameters["@Id"].Value = au_id.Value;
// au_id.Value是text控制元件或其他控制元件的值,也可直接賦值如”abcd”
myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));
myCommand.Parameters["@LName"].Value = au_lname.Value;
myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));
myCommand.Parameters["@FName"].Value = au_fname.Value;
myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));
myCommand.Parameters["@Phone"].Value = phone.Value;
myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));
myCommand.Parameters["@Address"].Value = address.Value;
myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));
myCommand.Parameters["@City"].Value = city.Value;
myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));
myCommand.Parameters["@State"].Value = state.Value;
myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));
myCommand.Parameters["@Zip"].Value = zip.Value;
myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));
myCommand.Parameters["@Contract"].Value = contract.Value;
myCommand.Connection.Open();
try
{
myCommand.ExecuteNonQuery();//寫入資料庫
Message.InnerHtml = "已新增記錄
" + insertCmd + "";
}
catch (SqlException e)
{
if (e.Number == 2627)
Message.InnerHtml = "錯誤:已存在具有相同主鍵的記錄";
else
Message.InnerHtml = "錯誤:未能新增記錄,請確保正確填寫了欄位";
Message.Style["color"] = "red";
}
myCommand.Connection.Close();
}
BindGrid();//重新整理DataGrid顯示
}
/* Page.IsValid 屬性
屬性值:如果頁驗證成功,則為 true;否則為 false。
備註:若要使該屬性返回 true,Page.Validators 屬性中的所有驗證伺服器控制元件必須都驗證成功。只有在已呼叫 Page.Validate 方法,或已在開始窗體處理的 ASP.NET 伺服器控制元件的 OnServerClick 處理程式中將 CausesValidation 屬性設定為 true 後才可以選中該屬性,。這些伺服器控制元件包括 Button、HtmlButton、HtmlInputButton、HtmlInputImage、ImageButton 以及 LinkButton 類。
示例:下面的示例說明使用 IsValid 屬性設定條件語句。如果該屬性返回 true,則 lblOutput 控制元件的 Text 屬性被設定為“Page is valid!”。否則,它被設定為“Some of the required fields are empty”。
void ValidateBtn_Click(Object Sender, EventArgs E) {
if (Page.IsValid == true) {
lblOutput.Text = "Page is Valid!";
}
else {
lblOutput.Text = "Some of the required fields are empty";
}
}
、修改資料
修改資料與新增資料不同,為了確定哪一行應該是可編輯的,需要一種方法接受使用者關於他們希望編輯哪一行的輸入。DataGrid 可以包含一個 EditCommandColumn 來呈現激發三個特殊事件的連結:EditCommand、UpdateCommand 和 CancelCommand。EditCommandColumn 以宣告方式新增到 DataGrid 的 Columns 集合,並將DataGrid的DataKeyFied屬性與資料庫中索引欄位相連線。如本例中:DataKeyField=au_id
SqlConnection myConnection;
protected void Page_Load(Object Src, EventArgs E)
{
myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
if (!IsPostBack)
BindGrid();
}
public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "
+ "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";//where為查詢條件
SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));
myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));
myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));
myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));
myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));
myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));
myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));
myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));
myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));
myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)e.Item.ItemIndex];
String[] cols = {"@Id","@LName","@FName","@Phone","@Address","@City","@State","@Zip","@Contract"};
int numCols = e.Item.Cells.Count;
for (int i=2; i
{
String colvalue =((TextBox)e.Item.Cells[i].Controls[0]).Text;
// 檢查在所需欄位中是否有空值
if (i<6 && colvalue == "")
{
Message.InnerHtml = "錯誤:“作者 ID”、“姓名”或“電話”不允許使用空值";
Message.Style["color"] = "red";
return;
}
myCommand.Parameters[cols[i-1]].Value = colvalue;
}
//追加最後一行,將 true/false 值轉換為 0/1
if (String.Compare(((TextBox)e.Item.Cells[numCols-1].Controls[0]).Text, "True", true)==0)
myComm
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/631872/viewspace-877631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 運算元據庫
- 運算元據庫表
- yii運算元據庫
- Mysqli運算元據庫MySql
- DDL:運算元據庫
- jmeter運算元據庫JMeter
- ecshop運算元據庫類
- PHP mysqli 運算元據庫PHPMySql
- 利用 Sequelize 來運算元據庫
- java 運算元據庫備份Java
- Python運算元據庫(3)Python
- perl協程運算元據庫
- Go語言運算元據庫Go
- 求助 liferay運算元據庫
- Python學習:運算元據庫Python
- Django在Ubuntu下運算元據庫DjangoUbuntu
- go 語言運算元據庫 CRUDGo
- JDBC運算元據庫基本步驟JDBC
- [python] 基於Dataset庫運算元據庫Python
- Android中使用LitePal運算元據庫Android
- 資料庫誤運算元據恢復資料庫
- 肖sir__jmeter之運算元據庫JMeter
- MySQL DML運算元據MySql
- python運算元據Python
- lavavel 中運算元據庫查詢別名
- 教你如何用python運算元據庫mysql!!PythonMySql
- 使用WordPress中的wpdb類運算元據庫
- 非常有用的jdbc的運算元據庫JDBC
- 最近專案中用到的運算元據的一些簡便方法
- Oracle OCP(10):運算元據Oracle
- Go語言運算元據庫及其常規操作Go
- 如何讓Designer更好地運算元據庫物件物件
- 利用javaBean運算元據庫表及其子段 (轉)JavaBean
- uniapp單機軟體運算元據庫(安卓)APP安卓
- python運算元據庫,批量插入資料庫資料Python資料庫
- 好程式設計師分享DDL之運算元據庫程式設計師
- spring-boot-route(七)整合jdbcTemplate運算元據庫SpringbootJDBC
- spring-boot-route(八)整合mybatis運算元據庫SpringbootMyBatis