這幾天由于要交數(shù)據(jù)庫課程設計,就做了一個校園自助銀行系統(tǒng)。由于經(jīng)驗不多,系統(tǒng)做的比較簡單,沒有用三層結構,一些數(shù)據(jù)庫的操作就在用戶層實現(xiàn)了。以下是這個系統(tǒng)的所有代碼:
軟件設計思路
1、 首先建立一個登陸界面,然后做主界面,主界面有以下5個功能:取款,存款,轉賬,轉賬,信息查詢及歷史賬單查詢,修改密碼
2、 在寫數(shù)據(jù)連接代碼時,我寫了一個SqlHelper類,具體代碼如下
1 public class SqlHelper 2 { 3 // 連接數(shù)據(jù)庫的字符串 4 static string connStr = @" Data Source=zhao\SQLEXPRESS;Initial Catalog=校園自助銀行系統(tǒng);Integrated Security=True " ; 5 // 返回一個表 6 public static DataTable ExecuteDataTable( string sql, params SqlParameter[] param) 7 { 8 DataTable dt = new DataTable(); 9 using (SqlConnection conn = new SqlConnection(connStr)) 10 { 11 conn.Open(); 12 using (SqlCommand cmd = new SqlCommand(sql, conn)) 13 14 { 15 if (param != null ) 16 { 17 cmd.Parameters.AddRange(param); 18 } 19 SqlDataAdapter sad = new SqlDataAdapter(cmd); 20 sad.Fill(dt); 21 } 22 } 23 return dt; 24 } 25 // 執(zhí)行增刪改 26 public static int ExecuteNonQuery( string sql, params SqlParameter[] param) 27 { 28 int result = - 1 ; 29 using (SqlConnection conn = new SqlConnection(connStr)) 30 { 31 conn.Open(); 32 using (SqlCommand cmd = new SqlCommand(sql, conn)) 33 { 34 if (param != null ) 35 { 36 cmd.Parameters.AddRange(param); 37 } 38 result = cmd.ExecuteNonQuery(); 39 } 40 } 41 return result; 42 } 43 44 // 獲取登錄用戶的信息 45 public static DataRow GetDataRow() 46 { 47 DataTable dt = SqlHelper.ExecuteDataTable( " select * from 賬戶信息 where CardNumber=@cardnumber " , new SqlParameter( " @cardnumber " , UserCardInfo.usercardinfo)); 48 DataRow dr = dt.Rows[ 0 ]; 49 return dr; 50 51 } 52 }
?
在以后的對數(shù)據(jù)庫操作的過程中,都是使用以上類中的方法
3、在做登錄界面前,先在主界面使用以下代碼,在軟件運行時,先彈出登錄界面
1 Login login = new Login(); // Login是登錄對話框 2 login.ShowDialog();
?
在進入登錄界面時,我先定義一個隨機數(shù),用于驗證碼功能的實現(xiàn)
1 Random r = new Random(); 2 lblYanZheng.Text = r.Next( 1000 , 9999 ).ToString(); // 驗證碼的范圍是1000到9999
?
以下代碼是具體的登錄代碼
1 int count = 3 ; 2 private void btnLogin_Click( object sender, EventArgs e) 3 { 4 // 記錄銀行卡號 5 string cardnumber = txtCardNumber.Text; 6 // 記錄登錄密碼 7 string secret = txtCardSecret.Text; 8 // 查詢數(shù)據(jù)庫中是否有相對應的用戶 9 string sqlstr = " select * from 賬戶信息 where CardNumber=@cardnumber and Secret=@secret " ; 10 DataTable dt = SqlHelper.ExecuteDataTable(sqlstr, new SqlParameter( " @cardnumber " , cardnumber), new SqlParameter( " @secret " , secret)); 11 // 如果查詢結果大于0個,則表示有該用戶 12 if (dt.Rows.Count > 0 ) 13 { 14 // 如果驗證碼正確,則允許登錄 15 if (txtYanZheng.Text == lblYanZheng.Text) 16 { 17 // 用用戶信息類的usercardinfo變量保存銀行卡號 18 UserCardInfo.usercardinfo = cardnumber; 19 // 選中查詢結果的第一行 20 DataRow dr = dt.Rows[ 0 ]; 21 DataTable dtUser = SqlHelper.ExecuteDataTable( " select * from 用戶 where CardNumber=@cardnumber " , new SqlParameter( " @cardnumber " , cardnumber)); 22 DataRow drUser = dtUser.Rows[ 0 ]; 23 UserCardInfo.name = drUser[ " Name " ].ToString(); 24 // 登錄成功后,關閉登錄對話框 25 this .Close(); 26 } 27 else 28 { 29 // 如果驗證碼,則計數(shù)器遞減 30 count-- ; 31 if (count <= 0 ) 32 { 33 MessageBox.Show( " 密碼輸錯次數(shù)過多,程序即將退出 " ); 34 System.Environment.Exit( 0 ); 35 } 36 ShowMsg( " 驗證碼錯誤,您還有 " +count+ " 次機會 " ); 37 return ; 38 } 39 } 40 else 41 { 42 // 如果用戶名或密碼錯誤,則計數(shù)器遞減 43 if (dt.Rows.Count <= 0 ) 44 { 45 count-- ; 46 if (count <= 0 ) 47 { 48 MessageBox.Show( " 密碼輸錯次數(shù)過多,程序即將退出 " ); 49 System.Environment.Exit( 0 ); 50 } 51 ShowMsg( " 銀行賬號或密碼錯誤,您還有 " + count + " 次機會 " ); 52 return ; 53 } 54 // 如果驗證碼錯誤 55 else if (txtYanZheng.Text != lblYanZheng.Text) 56 { 57 count-- ; 58 if (count <= 0 ) 59 { 60 MessageBox.Show( " 密碼輸錯次數(shù)過多,程序即將退出 " ); 61 System.Environment.Exit( 0 ); 62 } 63 ShowMsg( " 驗證碼錯誤,您還有 " + count + " 次機會 " ); 64 return ; 65 } 66 } 67 } 68 69 private void btnCancle_Click( object sender, EventArgs e) 70 { 71 // 徹底退出程序 72 System.Environment.Exit( 0 ); 73 } 74 void ShowMsg( string msg) 75 { 76 // 顯示消息 77 MessageBox.Show(msg); 78 } 79 80 private void Login_Load( object sender, EventArgs e) 81 { 82 // 設置將關閉按鈕隱藏 83 this .ControlBox = false ; 84 }
?
4、進入主界面后
1 // 打開取款對話框 2 private void lblQuKuan_Click( object sender, EventArgs e) 3 { 4 QuKuan qck = new QuKuan(); 5 qck.ShowDialog(); 6 } 7 // 打開存款對話框 8 private void lblCunKuan_Click( object sender, EventArgs e) 9 { 10 CunKuan qck = new CunKuan(); 11 qck.ShowDialog(); 12 } 13 // 打開轉賬對話框 14 private void lblZhuanZhang_Click( object sender, EventArgs e) 15 { 16 ZhuanZhang zz = new ZhuanZhang(); 17 zz.ShowDialog(); 18 } 19 // 打開查詢個人信息對話框 20 private void lblChaXun_Click( object sender, EventArgs e) 21 { 22 ChaXun cx = new ChaXun(); 23 cx.ShowDialog(); 24 } 25 // 打開修改密碼對話框 26 private void lblXiuGai_Click( object sender, EventArgs e) 27 { 28 ChangeSecret cs = new ChangeSecret(); 29 cs.ShowDialog(); 30 } 31 32 // 歡迎詞做跑龍燈運動 33 private void lbltimer_Tick( object sender, EventArgs e) 34 { 35 lblWelcome.Text = lblWelcome.Text.Substring( 1 ) + lblWelcome.Text.First(); 36 } 37 38 private void 切換賬戶ToolStripMenuItem_Click( object sender, EventArgs e) 39 { 40 // 打開登錄對話框 41 Login login = new Login(); 42 login.ShowDialog(); 43 44 DataTable dt = SqlHelper.ExecuteDataTable( " select * from 用戶 where CardNumber=@cardnumber " , new SqlParameter( " @cardnumber " , UserCardInfo.usercardinfo)); 45 46 // 更新主界面用戶名稱 47 DataRow dr = dt.Rows[ 0 ]; 48 lblUserInfo.Text = dr[ " Name " ].ToString(); 49 } 50 51 private void 安全退出ToolStripMenuItem_Click( object sender, EventArgs e) 52 { 53 // 退出應用程序 54 Application.Exit(); 55 } 56 57 private void Form1_Load( object sender, EventArgs e) 58 { 59 // 顯示登錄用戶的名稱 60 lblUserInfo.Text = "" ; 61 DataTable dt = SqlHelper.ExecuteDataTable( " select * from 用戶 where CardNumber=@cardnumber " ,
new SqlParameter( " @cardnumber " ,UserCardInfo.usercardinfo)); 62 DataRow dr = dt.Rows[ 0 ]; 63 lblUserInfo.Text = dr[ " Name " ].ToString(); 64 }
?
5、在進入主界面后,我定義了一個類UserCardInfo,里面定義了幾個字段,用記錄用戶信息
1 static class UserCardInfo 2 { 3 // 保存用戶登錄的卡號 4 public static string usercardinfo; 5 // 保存交易時間 6 public static string time; 7 // 保存交易類型 8 public static string type; 9 // 保存交易金額 10 public static string money; 11 // 保存賬戶余額 12 public static string remain; 13 // 保存用戶姓名 14 public static string name; 15 }
?
6、在做存款取款轉賬功能前,我先寫了CunQunKuan類,用于定義存取款轉賬方法,具體代碼如下:
1 static class CunQuKuan 2 { 3 // 如果b為true,則為取款,否則為轉賬 4 public static bool QuKuan( decimal money, bool b) 5 { 6 DataRow dr = SqlHelper.GetDataRow(); 7 // 先獲得當前用戶的余額 8 decimal moneyRemain = decimal .Parse(dr[ " Money " ].ToString()); 9 // 如果取款或轉賬的金額大于賬戶余額,則失敗 10 if (money > moneyRemain) 11 { 12 MessageBox.Show( " 余額不足,取款失敗! " ); 13 return false ; 14 } 15 else 16 { 17 // 如果成功,則將余額減去所取的金額 18 moneyRemain -= money; 19 // 更新數(shù)據(jù)庫,將該用戶的賬戶余額改為取款后的余額 20 SqlHelper.ExecuteNonQuery( " update 賬戶信息 set Money=@moneyRemain where CardNumber=@cardnumber " , new SqlParameter( " @moneyRemain " , moneyRemain),
new SqlParameter( " @cardnumber " , dr[ " CardNumber " ].ToString())); 21 if (b == true ) 22 { 23 MessageBox.Show( " 取款成功! " ); 24 } 25 else 26 { 27 MessageBox.Show( " 轉賬成功! " ); 28 } 29 return true ; 30 } 31 } 32 33 // 存款的方法 34 public static void CunKuan( decimal money) 35 { 36 DataRow dr = SqlHelper.GetDataRow(); 37 decimal moneyRemain = decimal .Parse(dr[ " Money " ].ToString()); 38 moneyRemain += money; 39 SqlHelper.ExecuteNonQuery( " update 賬戶信息 set Money=@moneyRemain where CardNumber=@cardnumber " , new SqlParameter( " @moneyRemain " , moneyRemain),
new SqlParameter( " @cardnumber " , dr[ " CardNumber " ].ToString())); 40 MessageBox.Show( " 存款成功! " ); 41 } 42 }
?
7、在做好以上工作以后,我做了取款功能,代碼如下:
1 private void btnOk_Click( object sender, EventArgs e) 2 { 3 decimal money = decimal .Parse(txtMoney.Text); 4 // 執(zhí)行取款操作,并獲得返回值,如果返回true,則打印憑證 5 bool b= CunQuKuan.QuKuan(money, true ); 6 if (b) 7 { 8 DialogResult result = MessageBox.Show( " 是否打印憑條 " , " 打印憑條 " , MessageBoxButtons.YesNo); 9 DataRow dr = SqlHelper.GetDataRow(); 10 // 如果點是,則打印憑證 11 if (result == DialogResult.Yes) 12 { 13 // 將標簽的文本改為取款信息 14 lblprint.Text = string .Format( " 卡號:{0}\t\n姓名:{1}\t\n時間:{2}\t\n取款:{3} " , dr[ " CardNumber " ].ToString(), UserCardInfo.name, DateTime.Now, money.ToString()); 15 // 將標簽狀態(tài)改為可視 16 lblprint.Visible = true ; 17 } 18 // 向交易信息中插入取款記錄 19 AddJYInfo.MyMethod(dr,money, " 取款 " ); 20 } 21 } 22 23 private void btnBack_Click( object sender, EventArgs e) 24 { 25 // 關閉取款對話框 26 this .Close(); 27 } 28 29 // 當窗口加載的時候,顯示賬戶余額 30 private void QuKuan_Load( object sender, EventArgs e) 31 { 32 DataRow dr = SqlHelper.GetDataRow(); 33 lblMoneyRemain.Text += dr[ " Money " ].ToString(); 34 }
?
8、以下是存款功能代碼:
1 private void btnOk_Click( object sender, EventArgs e) 2 { 3 // 獲得輸入的存款金額 4 decimal money = decimal .Parse(txtMoney.Text); 5 // 執(zhí)行存款程序 6 CunQuKuan.CunKuan(money); 7 // 返回用戶信息所在行 8 DataRow dr= SqlHelper.GetDataRow(); 9 // 想交易信息中添加存款記錄 10 AddJYInfo.MyMethod(dr, money, " 存款 " ); 11 } 12 13 private void btnBack_Click( object sender, EventArgs e) 14 { 15 // 關閉存款對話框 16 this .Close(); 17 }
?
9、以下是轉賬代碼:
1 private void btnOk_Click( object sender, EventArgs e) 2 { 3 decimal money = decimal .Parse(txtMoney.Text); 4 string receiver = txtReceiver.Text; 5 // 獲取轉賬用戶的記錄 6 DataRow dr= SqlHelper.GetDataRow(); 7 // 如果轉賬的金額大于賬戶余額,則禁止轉賬 8 if (money > decimal .Parse(dr[ " Money " ].ToString())) 9 { 10 MessageBox.Show( " 余額不足,轉賬失敗! " ); 11 return ; 12 } 13 else 14 { 15 DataTable dt = SqlHelper.ExecuteDataTable( " select * from 賬戶信息 where CardNumber=@receiver " , new SqlParameter( " @receiver " , receiver)); 16 // 如果數(shù)據(jù)庫中存在接收轉賬的用戶 17 if (dt.Rows.Count > 0 ) 18 { 19 DataRow drReceiver = dt.Rows[ 0 ]; 20 // 查詢接收轉賬的用戶的金額 21 decimal moneyReceiver = decimal .Parse(drReceiver[ " Money " ].ToString()); 22 // 接收者的金額加上轉的金額 23 moneyReceiver += money; 24 // 更新接收轉賬的用戶的金額 25 SqlHelper.ExecuteNonQuery( " update 賬戶信息 set Money=@moneyReceiver where CardNumber=@receiver " , new SqlParameter( " @moneyReceiver " , moneyReceiver),
new SqlParameter( " @receiver " , receiver)); 26 // 執(zhí)行取款方法,false表示彈出的消息框為轉賬成功 27 CunQuKuan.QuKuan(money, false ); 28 dr = SqlHelper.GetDataRow(); 29 // 向交易信息中添加轉賬記錄 30 AddJYInfo.MyMethod(dr, money, " 轉賬 " ); 31 } 32 else 33 { 34 MessageBox.Show( " 該用戶不存在,請核對賬戶是否正確 " ); 35 return ; 36 } 37 } 38 39 } 40 41 42 private void btnBack_Click( object sender, EventArgs e) 43 { 44 // 關閉轉賬對話框 45 this .Close(); 46 }
?
10、同時,為了記錄用戶存款取款轉賬記錄,我定義了AddJYInfo類,代碼如下:
1 class AddJYInfo 2 { 3 // 向交易信息表中添加交易信息記錄 4 public static void MyMethod(DataRow dr, Decimal money, string type) 5 { 6 // 銀行卡號 7 UserCardInfo.usercardinfo = dr[ " CardNumber " ].ToString(); 8 // 交易金額 9 UserCardInfo.money = money.ToString(); 10 // 交易時間 11 UserCardInfo.time = DateTime.Now.ToString(); 12 // 交易類型 13 UserCardInfo.type = type; 14 // 交易后賬戶余額 15 UserCardInfo.remain = dr[ " Money " ].ToString(); 16 // 向數(shù)據(jù)庫中插入交易記錄 17 string sql = " insert into 交易記錄 (CardNumber,Time,Money,Type,Remain) Values(@usercardinfo, @time,@money,@type,@remain) " ; 18 SqlHelper.ExecuteNonQuery(sql, new SqlParameter( " @usercardinfo " , UserCardInfo.usercardinfo),
new SqlParameter( " @time " , UserCardInfo.time),
new SqlParameter( " @money " , UserCardInfo.money),
new SqlParameter( " @type " , UserCardInfo.type),
new SqlParameter( " @remain " , UserCardInfo.remain)); 19 } 20 }
?
11、接下來是信息查詢及歷史交易記錄查詢功能,在做歷史交易記錄查詢功能時,我添加了類AddData,定義了一個根據(jù)所選的年份和月份動態(tài)添加每個月的天數(shù),代碼如下:
1 class AddData 2 { 3 public static List< int > AddDay( int year, int month) 4 { 5 List< int > list = new List< int > (); 6 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 9 || month == 11 ) 7 { 8 list.Clear(); 9 for ( int i = 1 ; i <= 31 ; i++ ) 10 { 11 list.Add(i); 12 } 13 } 14 else if (month == 4 || month == 6 || month == 8 || month == 10 || month == 12 ) 15 { 16 list.Clear(); 17 for ( int i = 1 ; i <= 30 ; i++ ) 18 { 19 list.Add(i); 20 } 21 } 22 else 23 { 24 if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ) 25 { 26 list.Clear(); 27 for ( int i = 1 ; i <= 29 ; i++ ) 28 { 29 list.Add(i); 30 } 31 } 32 else 33 { 34 list.Clear(); 35 for ( int i = 1 ; i <= 28 ; i++ ) 36 { 37 list.Add(i); 38 } 39 } 40 } 41 return list; 42 } 43 }
?
12、以下是信息查詢及歷史交易記錄查詢代碼:
1 private void ChaXun_Load( object sender, EventArgs e) 2 { 3 // 獲取該用戶信息 4 DataRow dr = SqlHelper.GetDataRow(); 5 // 獲得銀行卡號 6 string cardnumber = dr[ " CardNumber " ].ToString(); 7 // 將表格控件的數(shù)據(jù)源綁定 8 dataGridView.DataSource = SqlHelper.ExecuteDataTable( " select * from 用戶 where CardNumber=@cardnumber " , new SqlParameter( " @cardnumber " , cardnumber)); 9 // 選擇起始年份的默認項為下標為0的項 10 cbStartYear.SelectedIndex = 0 ; 11 // 選擇截止年份的默認項為下標為0的項 12 cbEndYear.SelectedIndex = 0 ; 13 // 選擇起始月份的默認項為下標為5的項 14 cbStartMonth.SelectedIndex = 5 ; 15 // 選擇截止月份的默認項為下標為5的項 16 cbEndMonth.SelectedIndex = 5 ; 17 } 18 19 private void btnOk_Click( object sender, EventArgs e) 20 { 21 // 關閉查詢對話框 22 this .Close(); 23 } 24 25 private void btnQuery_Click( object sender, EventArgs e) 26 { 27 28 int startyear = int .Parse(cbStartYear.SelectedItem.ToString()); 29 int startmonth = int .Parse(cbStartMonth.SelectedItem.ToString()); 30 31 int endyear = int .Parse(cbEndYear.SelectedItem.ToString()); 32 int endmonth = int .Parse(cbEndMonth.SelectedItem.ToString()); 33 34 try 35 { 36 int startday = int .Parse(cbStartDay.SelectedItem.ToString()); 37 int endday = int .Parse(cbEndDay.SelectedItem.ToString()); 38 39 if (startyear > endyear || (startyear <= endyear && startmonth > endmonth) || (startyear <= endyear && startmonth <= endmonth && startday > endday)) 40 { 41 MessageBox.Show( " 請輸入正確的查詢日期范圍 " ); 42 return ; 43 } 44 else 45 { 46 DataTable dt = SqlHelper.ExecuteDataTable( " select * from 交易記錄 where Year(Time)>=@startyear and Year(Time)<=@endyear and Month(Time)>=@startmonth and Month(Time)<=@endmonth and Day(Time)>=@startday and Day(Time)<=@endday and CardNumber=@cardnumber " , new SqlParameter( " @startyear " , startyear),
new SqlParameter( " @endyear " , endyear),
new SqlParameter( " @startmonth " , startmonth),
new SqlParameter( " @endmonth " , endmonth),
new SqlParameter( " @startday " , startday),
new SqlParameter( " @endday " , endday),
new SqlParameter( " @cardnumber " , UserCardInfo.usercardinfo)); 47 if (dt.Rows.Count > 0 ) 48 { 49 tableHistory.DataSource = dt; 50 } 51 else 52 { 53 tableHistory.DataSource = null ; 54 MessageBox.Show( " sorry,未查詢到相關數(shù)據(jù) " ); 55 } 56 } 57 } 58 catch (Exception) 59 { 60 MessageBox.Show( " 請選擇查詢日期 " ); 61 } 62 63 } 64 // 當起始月份的選擇項索引發(fā)生變化時發(fā)生的事件 65 private void cbStartMonth_SelectedIndexChanged( object sender, EventArgs e) 66 { 67 int month = int .Parse(cbStartMonth.SelectedItem.ToString()); 68 int year = int .Parse(cbStartYear.SelectedItem.ToString()); 69 // 先清空之前已添加的天數(shù) 70 cbStartDay.Items.Clear(); 71 foreach ( int item in AddData.AddDay(year, month)) 72 { 73 // 向起始天下拉框中添加天數(shù) 74 cbStartDay.Items.Add(item); 75 } 76 77 } 78 // 當截止月份的選擇項索引發(fā)生變化時發(fā)生的事件 79 private void cbEndMonth_SelectedIndexChanged( object sender, EventArgs e) 80 { 81 int month = int .Parse(cbEndMonth.SelectedItem.ToString()); 82 int year = int .Parse(cbEndYear.SelectedItem.ToString()); 83 cbEndDay.Items.Clear(); 84 foreach ( int item in AddData.AddDay(year, month)) 85 { 86 cbEndDay.Items.Add(item); 87 } 88 89 }
?
13、最后是修改密碼功能,具體代碼如下:
1 // 設置允許改密碼錯誤的次數(shù) 2 int count = 3 ; 3 private void btnOk_Click( object sender, EventArgs e) 4 { 5 // 或舊密碼 6 string oldpwd = txtOldPwd.Text; 7 // 獲得輸入的新密碼 8 string newpwd = txtNewPwd.Text; 9 // 獲得確認的新密碼 10 string newpwd2 = txtNewPwd2.Text; 11 // 查詢該用戶信息 12 DataRow dr = SqlHelper.GetDataRow(); 13 // 如果輸入的舊密碼正確和兩次輸入的新密碼都一致,則修改密碼成功 14 if (oldpwd == dr[ " secret " ].ToString() && newpwd == newpwd2) 15 { 16 SqlHelper.ExecuteNonQuery( " update 賬戶信息 set Secret=@secret where CardNumber=@cardnumber " , new SqlParameter( " @secret " , newpwd),
new SqlParameter( " @cardnumber " , dr[ " CardNumber " ].ToString())); 17 MessageBox.Show( " 恭喜您,密碼修改成功! " ); 18 } 19 // 如果舊密碼錯誤,則要求重新輸入舊密碼,如果輸錯三次,則退出修改密碼對話框 20 else if (oldpwd != dr[ " secret " ].ToString()) 21 { 22 MessageBox.Show( " 原始密碼不正確,您還剩 " + --count + " 次機會 " ); 23 if (count <= 0 ) 24 { 25 this .Close(); 26 } 27 return ; 28 } 29 // 如果兩次輸入的新密碼不一致 30 else if (newpwd != newpwd2) 31 { 32 MessageBox.Show( " 親,您的倆次密碼不一致哦!再檢查一下吧 " ); 33 return ; 34 } 35 36 } 37 38 private void btnCancle_Click( object sender, EventArgs e) 39 { 40 // 關閉修改密碼對話框 41 this .Close(); 42 }
?
?
最后總結一下做這個系統(tǒng)之后的感受吧,以前學習的時候,不知道為什么別人要定義這個類,為什么這個方法的返回值要是這個類型,其實大可不必糾結這些問題,在自己做的時候,就會發(fā)現(xiàn)根據(jù)項目的需要,自然而然的需要做這些事情。通過這次實踐,更加加深了我對ADO.Net的理解,在后面的學習過程中,多實踐多練習才是快速掌握知識的正確途徑,沒有一定代碼的積累,是很難成為真正的高手。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
