1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace 使用存儲過程 12 { 13 using System.Data.SqlClient; 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 string connStr = "Data Source=.;Initial Catalog=MySchoolMoreData;Integrated Security=True"; 21 22 #region 調用沒有參數的存儲過程 +void btnNoPARAMAS_Click(object sender, EventArgs e) 23 /// <summary> 24 /// 調用沒有參數的存儲過程 25 /// </summary> 26 /// <param name="sender"></param> 27 /// <param name="e"></param> 28 private void btnNoPARAMAS_Click(object sender, EventArgs e) 29 { 30 //SqlDataAdapter da = new SqlDataAdapter("select * from Student", connStr); 31 SqlDataAdapter da = new SqlDataAdapter("usp_getAllStuInfo", connStr); 32 DataTable dt = new DataTable(); 33 da.Fill(dt); 34 this.dgvList.DataSource = dt; 35 } 36 #endregion 37 38 #region 調用有輸入參數的存儲過程 +void btnHasParamas_Click(object sender, EventArgs e) 39 /// <summary> 40 /// 調用有輸入參數的存儲過程 41 /// </summary> 42 /// <param name="sender"></param> 43 /// <param name="e"></param> 44 private void btnHasParamas_Click(object sender, EventArgs e) 45 { 46 SqlDataAdapter da = new SqlDataAdapter("usp_getStuInfoBySexAndCname", connStr); 47 //1.如果傳入了存儲過程,必須告訴服務器按存儲過程進行處理,否則就會按sql語句進行處理 48 da.SelectCommand.CommandType = CommandType.StoredProcedure; 49 //2.創建存儲過程中所需要的參數,注意:名稱必須與存儲過程的參數名稱對應 50 SqlParameter[] ps = { 51 new SqlParameter("@cname",this.cboClass.Text),//Text獲取顯示在下拉列表控件中的文本值 52 new SqlParameter("@Sex",rdoMale.Checked?"男":"女") 53 }; 54 //3.將參數傳遞給服務器使用 55 da.SelectCommand.Parameters.AddRange(ps); 56 DataTable dt = new DataTable(); 57 da.Fill(dt); 58 this.dgvList.DataSource = dt; 59 } 60 #endregion 61 62 #region 加載班級下拉列表數據和Dgv控件的分頁數據 +void Form1_Load(object sender, EventArgs e) 63 /// <summary> 64 /// 加載班級下拉列表數據和Dgv控件的分頁數據 65 /// </summary> 66 /// <param name="sender"></param> 67 /// <param name="e"></param> 68 private void Form1_Load(object sender, EventArgs e) 69 { 70 #region 加載下拉列表數據 71 SqlDataAdapter da = new SqlDataAdapter("select classid ,classname from classes where classid<@num", connStr); 72 SqlParameter p = new SqlParameter("@num", 15); 73 SqlParameter p2 = new SqlParameter("@num2", 150); 74 da.SelectCommand.Parameters.Add(p2); 75 da.SelectCommand.Parameters.Add(p); 76 DataTable dt = new DataTable(); 77 da.Fill(dt); 78 this.cboClass.DisplayMember = "classname"; 79 this.cboClass.ValueMember = "classid"; 80 this.cboClass.DataSource = dt; 81 #endregion 82 83 LoadDgvData(); 84 } 85 #endregion 86 87 int pageIndex = 1; //當前頁索引 88 //int pageCount = 5; 89 90 #region 調用帶輸出參數和返回值的存儲過程 +void btnOutput_Click(object sender, EventArgs e) 91 /// <summary> 92 /// 調用帶輸出參數和返回值的存儲過程 93 /// </summary> 94 /// <param name="sender"></param> 95 /// <param name="e"></param> 96 private void btnOutput_Click(object sender, EventArgs e) 97 { 98 SqlDataAdapter da = new SqlDataAdapter("usp_GetCountByCnameAndSex", connStr); 99 //1.如果傳入了存儲過程,必須告訴服務器按存儲過程進行處理,否則就會按sql語句進行處理 100 da.SelectCommand.CommandType = CommandType.StoredProcedure; 101 //2.創建存儲過程中所需要的參數,注意:名稱必須與存儲過程的參數名稱對應 102 SqlParameter[] ps = { 103 new SqlParameter("@cname",this.cboClass.Text),//Text獲取顯示在下拉列表控件中的文本值 104 new SqlParameter("@Sex",rdoMale.Checked?"男":"女"), 105 //創建輸出參數的時候,沒有必要賦值 106 //創建一個輸出參數,服務器最終將輸出參數的值返回到這個參數對象的Value屬性中 107 new SqlParameter("@totalCount",100), 108 new SqlParameter("@cnt",SqlDbType.Int), 109 new SqlParameter("@result",SqlDbType.Int) 110 }; 111 //3.一定要修改輸出參數的方向,否則服務器會將所有參數當成輸入參數進行處理,需要客戶端傳入值,如果沒有就報錯 112 ps[0].Direction = ParameterDirection.Input;//默認就是input,不設置也沒有關系 113 //ps[2].Direction = ParameterDirection.Output;//設置參數的方向為輸出參數 114 //指定方向,是向服務器發送返回對應類型輸出參數或者返回值的請求 115 ps[3].Direction = ParameterDirection.Output; 116 ps[4].Direction = ParameterDirection.ReturnValue; 117 //3.將參數傳遞給服務器使用 118 da.SelectCommand.Parameters.AddRange(ps); 119 DataTable dt = new DataTable(); 120 da.Fill(dt); 121 this.dgvList.DataSource = dt; 122 this.lblMsg.Text = "總人數是:" + ps[2].Value + ",指定性別的人數是:" + ps[3].Value + ",返回值是:" + ps[4].Value; 123 } 124 #endregion 125 126 #region 下一頁 + void btnNext_Click(object sender, EventArgs e) 127 /// <summary> 128 /// 下一頁 129 /// </summary> 130 /// <param name="sender"></param> 131 /// <param name="e"></param> 132 private void btnNext_Click(object sender, EventArgs e) 133 { 134 if (pageIndex.ToString() == System.Configuration.ConfigurationManager.AppSettings["totalPageCount"]) 135 { 136 MessageBox.Show("沒有下一頁了"); 137 return; 138 } 139 pageIndex++; 140 LoadDgvData(); 141 } 142 #endregion 143 144 #region 獲取分頁數據 +void LoadDgvData() 145 /// <summary> 146 /// 獲取分頁數據 147 /// </summary> 148 private void LoadDgvData() 149 { 150 string count = System.Configuration.ConfigurationManager.AppSettings["pageCount"]; 151 SqlParameter[] ps ={ 152 new SqlParameter("@pageIndex",pageIndex), 153 new SqlParameter("@pageCount",count), 154 new SqlParameter("@totalPageCount",SqlDbType.Int) 155 }; 156 ps[2].Direction = ParameterDirection.Output;//修改參數的方法為輸出參數--發送請求 157 this.dgvList.DataSource = SqlHelper.ExecuteTable("usp_getPageData", CommandType.StoredProcedure, ps); 158 System.Configuration.ConfigurationManager.AppSettings["totalPageCount"] = ps[2].Value.ToString(); 159 } 160 #endregion 161 162 #region 上一頁 +void btnPre_Click(object sender, EventArgs e) 163 /// <summary> 164 /// 上一頁 165 /// </summary> 166 /// <param name="sender"></param> 167 /// <param name="e"></param> 168 private void btnPre_Click(object sender, EventArgs e) 169 { 170 if (pageIndex == 1) 171 { 172 MessageBox.Show("沒有上一頁了"); 173 return; 174 } 175 pageIndex--; 176 LoadDgvData(); 177 } 178 #endregion 179 } 180 }