例項
更新記錄
在本例子中,建立一個供使用者輸入學生學號和姓名的文字框和幾個對應不同操作型別的更新資訊按鈕,當使用者輸入資訊以後單擊相應的按鈕則執行相應的操作。在此例項中還將接觸到伺服器資訊驗證的相關知識。
(1)新建名為UpdateTest的Windows Application應用程式,在預設的Forml.cs中新增2個Label控制元件,2個TextBox控制元件,3個Button控制元件,按表4.7所示設定這7個控制元件的屬性。
表4.7控制元件屬性
控制元件型別 ID屬性 Text屬性 |
標籤 lblUserID 學號: 標籤 lblUserName 姓名: 文字框 txtUserlD 文字框 txtUserName 按鈕 btnExecute1 拼接字串 按鈕 btnExecute2 使用引數 按鈕 btnExecute3 使用儲存過程 |
(2)調整控制元件的位置(按照個人喜好了)
(3)雙擊“拼接字串”按鈕,註冊按鈕btnExecute的按鈕單擊事件btnExecute1_Click,
然後再切換到Form1.cs頁面的“設計”檢視,依次雙擊“使用引數”和“使用儲存過程”按鈕來註冊對應的按鈕單擊事件btnExecute2_Click和btnExecute3_Click。
(4)在Form1.cs檔案中首先引入名稱空間System.Data.SqlClient,然後新增一個名 CheckInfo的方法,返回值為bool型別,程式碼如下:
bool CheckInfo() { //判斷學號是否輸入 if (this.txtUserID.Text.Trim() == "") { Alert("學號不完整"); return false; } else if (this.txtUserName.Text.Trim() == "") //判斷姓名是否輸入 { Alert("姓名不完整"); return false; } //資訊檢查通過 return true; }
//其中,Alert是自定義的另外一個方法,用來彈出一個對話方塊,定義如下: void Alert(string message) { MessageBox.Show(null, message, "資訊提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
//在btnExecute1_Click中編寫如下程式碼: private void btnExecute1_Click(object sender, EventArgs e) { //資訊檢查 if(this.CheckInfo()) { //取值 string userId=this.txtUserID.Text.Trim(); string userName=this.txtUserName.Text.Trim(); //新建連線物件 SqlConnection conn=new SqlConnection(); conn.ConnectionString="Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI"; //拼接命令字串 string updateQuery="update StudentInfo set sName='"+userName+"'"+"where ID='"+userId+"’"; //新建命令物件 SqlCommand cmd=new SqlCommand(updateQuery,conn); conn.Open(); //儲存執行結果 int RecordsAffected=cmd.ExecuteNonQuery(); conn.Close(); //提示結果 Alert("更新資料數為"+RecordsAffected); } }
//在btnExecute2_Click中編寫如下程式碼: private void btnExecute2_Click(object sender, EventArgs e) { //資訊檢查 if(this.CheckInfo()) { //取值 string userId=this.txtUserID.Text.Trim(); string userName=this.txtUserName.Text.Trim(); //新建連線物件 SqlConnection conn=new SqlConnection(); conn.ConnectionString="Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI"; //拼接命令字串 string updateQuery="update StudentInfo set sName=@userName where ID=@userId"; //新建命令物件 SqlCommand cmd=new SqlCommand(updateQuery,conn); //新增引數 cmd.Parameters.Add(new SqlParameter("@userName", userName)); cmd.Parameters.Add(new SqlParameter("@userId", userId)); conn.Open(); //儲存執行結果 int RecordsAffected = cmd.ExecuteNonQuery(); conn.Close(); /* try { conn.Open(); //儲存執行結果 int RecordsAffected = cmd.ExecuteNonQuery(); } catch (Exception err) { MessageBox.Show(err.Message, "修改記錄失敗"); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } }*/ //提示結果 Alert("更新資料數為"+RecordsAffected); } }
//在btnExecute3_Click中編寫如下程式碼: private void btnExecute3_Click(object sender, EventArgs e) { //資訊檢查 if (this.CheckInfo()) { //取值 string userId = this.txtUserID.Text.Trim(); string userName = this.txtUserName.Text.Trim(); //新建連線物件 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI"; //新建命令物件 SqlCommand cmd = new SqlCommand("UpdateStudentInfo", conn); //指定命令型別為儲存過程 cmd.CommandType = CommandType.StoredProcedure; //新增引數 cmd.Parameters.Add(new SqlParameter("@userName", userName)); cmd.Parameters.Add(new SqlParameter("@userId", userId)); conn.Open(); //儲存執行結果 int RecordsAffected = cmd.ExecuteNonQuery(); conn.Close(); //提示結果 Alert("更新資料數為" + RecordsAffected); } }
(9)在學號和姓名中分別輸入資訊以後,單擊任意按鈕即可測試更新結果。
例如:
分別輸入學號"2007102001"和姓名“某某”後單擊任意按鈕.
程式碼講解
在引入了System.Data.SqlClient名稱空間以後,使用了SQL Server .NET資料提供程式對資料進行更新。
更新資料前使用了CheckInfo方法對資料進行檢查,檢視使用者是否在姓名和學號兩個文字框中輸入了有效的資訊,如果兩者的輸入資訊都有效,則該方法返回true,否則返回false,
方法實現如下:
//判斷學號是否輸入 if (this.txtUserID.Text.Trim() == "") { Alert("學號不完整"); return false; } else if (this.txtUserName.Text.Trim() == "") //判斷姓名是否輸入 { Alert("姓名不完整"); return false; } //資訊檢查通過 return true;
當使用者輸入的資訊不正確時,Checklnfo將呼叫Alert方法顯示提示資訊對話方塊,
Alert方法實際上是固定MessageBox.Show方法的一些引數,利用其來彈出對話方塊,Alert方法實現非常簡單,僅僅需要下面一句程式碼:
MessageBox.Show(null,message,"資訊提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
其中,message是Alert方法接受的引數。
在3個按鈕單擊事件中,程式程式碼分別實現對應的資料更新操作,這些操作前面都進行了詳細的講解,這裡不再贅述。