public partial class DisplayMessage : Form { #region 分頁 public delegate int EventPagingHandler(EventPagingArg e); PageData pd = new PageData(); public event EventPagingHandler EventPaging; /// <summary> /// 每頁顯示記錄數 /// </summary> private int _pageSize = 10; /// <summary> /// 每頁顯示記錄數 /// </summary> public int PageSize { get { return _pageSize; } set { _pageSize = value; GetPageCount(); } } private int _nMax = 0; /// <summary> /// 總記錄數 /// </summary> public int NMax { get { return _nMax; } set { _nMax = value; GetPageCount(); } } private int _pageCount = 1; /// <summary> /// 頁數=總記錄數/每頁顯示記錄數 /// </summary> public int PageCount { get { return _pageCount; } set { _pageCount = value; } } private int _pageCurrent = 1; /// <summary> /// 當前頁號 /// </summary> public int PageCurrent { get { return _pageCurrent; } set { _pageCurrent = value; } } public BindingNavigator ToolBar { get { return this.bindingNavigator; } } private void GetPageCount() { if (this.NMax > 0) { this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.NMax) / Convert.ToDouble(this.PageSize))); } else { this.PageCount = 0; } } /// <summary> /// 翻頁控件數據綁定的方法 /// </summary> public void Bind() { this.NMax = pd.GetTotalCount(); this.PageCurrent = pd.PageIndex; if (this.EventPaging != null) { this.NMax = this.EventPaging(new EventPagingArg(this.PageCurrent)); } if (this.PageCurrent > this.PageCount) { this.PageCurrent = this.PageCount; } if (this.PageCount == 1) { this.PageCurrent = 1; } lblPageCount.Text = "總共頁數為:" + this.PageCount.ToString() + "頁"; this.lblMaxPage.Text = "共" + this.NMax.ToString() + "條記錄"; this.txtCurrentPage.Text = this.PageCurrent.ToString(); if (this.PageCurrent == 1) { btnLast.Enabled = true; btnNext.Enabled = true; btnFirst.Enabled = false; btnPrev.Enabled = false; } else if (this.PageCurrent == this.PageCount) { btnLast.Enabled = false; btnNext.Enabled = false; btnFirst.Enabled = true; btnPrev.Enabled = true; } else { this.btnLast.Enabled = true; this.btnNext.Enabled = true; this.btnPrev.Enabled = true; this.btnFirst.Enabled = true; } if (this.NMax == 0) { btnNext.Enabled = false; btnPrev.Enabled = false; btnFirst.Enabled = false; btnLast.Enabled = false; } var dt = pd.QueryDataTable(); pager1.DataSource = dt; dataGridView1.DataSource = pager1; } private void btnFirst_Click(object sender, EventArgs e) { pd.PageIndex = 1; this.Bind(); } private void btnPrev_Click(object sender, EventArgs e) { pd.PageIndex -= 1; if (pd.PageIndex <= 0) { pd.PageIndex = 1; } this.Bind(); } private void btnNext_Click(object sender, EventArgs e) { pd.PageIndex += 1; if (pd.PageIndex > pd.PageCount) { pd.PageIndex = pd.PageCount; } this.Bind(); } private void btnLast_Click(object sender, EventArgs e) { pd.PageIndex = pd.PageCount; this.Bind(); } private void btnGo_Click(object sender, EventArgs e) { if (this.txtCurrentPage.Text != null && txtCurrentPage.Text != "") { if (Int32.TryParse(txtCurrentPage.Text, out _pageCurrent)) { pd.PageIndex = _pageCurrent; this.Bind(); } else { MessageBox.Show("輸入數字格式錯誤!"); } } } #endregion } public class EventPagingArg : EventArgs { private int _intPageIndex; public EventPagingArg(int PageIndex) { _intPageIndex = PageIndex; } } public class PageData { public int authority = -1; private int _PageSize = 10; private int _PageIndex = 1; private int _PageCount = 0; private int _TotalCount = 0; private string _TableName = "Process";//表名 private string _QueryFieldName = "*";//表字段FieldStr private string _OrderStr = "S.ID Desc"; //排序_SortStr private string _QueryCondition = "S.ID";//查詢的條件 RowFilter private string _PrimaryKey = "ID";//主鍵 #region 構造函數 字段 /// <summary> /// 顯示頁數 /// </summary> public int PageSize { get { return _PageSize; } set { _PageSize = value; } } /// <summary> /// 當前頁 /// </summary> public int PageIndex { get { return _PageIndex; } set { _PageIndex = value; } } /// <summary> /// 總頁數 /// </summary> public int PageCount { get { return _PageCount; } set { _PageCount = value; } } /// <summary> /// 總記錄數 /// </summary> public int TotalCount { get { return _TotalCount; } set { _TotalCount = value; } } /// <summary> /// 表名,包括視圖 /// </summary> public string TableName { get { return _TableName; } set { _TableName = value; } } /// <summary> /// 表字段FieldStr /// </summary> public string QueryFieldName { get { return _QueryFieldName; } set { _QueryFieldName = value; } } /// <summary> /// 排序字段 /// </summary> public string OrderStr { get { return _OrderStr; } set { _OrderStr = value; } } /// <summary> /// 查詢條件 /// </summary> public string QueryCondition { get { return _QueryCondition; } set { _QueryCondition = value; } } /// <summary> /// 主鍵 /// </summary> public string PrimaryKey { get { return _PrimaryKey; } set { _PrimaryKey = value; } } #endregion public SqlDataReader QueryDataTable() { SqlParameter[] parameters = { new SqlParameter("@TotalCount", SqlDbType.Int), new SqlParameter("@TotalPage", SqlDbType.Int), new SqlParameter("@Table", SqlDbType.NVarChar, 500), new SqlParameter("@Column", SqlDbType.NVarChar, 500), new SqlParameter("@OrderColumn", SqlDbType.NVarChar,50), new SqlParameter("@GroupColumn", SqlDbType.NVarChar , 50 ), new SqlParameter("@PageSize", SqlDbType.Int), new SqlParameter("@CurrentPage", SqlDbType.Int), new SqlParameter("@Group", SqlDbType.TinyInt), new SqlParameter("@Condition" ,SqlDbType.NVarChar , 1000 ) }; parameters[0].Value = _TotalCount; parameters[1].Value = _PageCount; parameters[2].Value = " Process AS S LEFT JOIN UserTable AS C ON C.ID = S.Level1 LEFT JOIN UserTable AS B ON B.ID = S.Level2 LEFT JOIN UserTable AS E ON E.ID = S.next "; parameters[3].Value = " C.Name ,B.Name as Name1,S.Level3 , E.Name as Name2,S.DocumentsID,S.Info,S.Note ,S.ID"; parameters[4].Value = _OrderStr; parameters[5].Value = _QueryCondition; parameters[6].Value = _PageSize; parameters[7].Value = _PageIndex; parameters[8].Value = false; parameters[9].Value = " ( Level3 =" + DbHelperSQL.Authority(Form1.userid) + " or next = " + Form1.userid + ") "; SqlDataReader ds = DbHelperSQL.RunProcedure("Pager", parameters); if (_TotalCount==0) _TotalCount = GetTotalCount(); if (_TotalCount == 0) { _PageIndex = 0; _PageCount = 0; } else { _PageCount = _TotalCount % _PageSize == 0 ? _TotalCount / _PageSize : _TotalCount / _PageSize + 1; if (_PageIndex > _PageCount) { _PageIndex = _PageCount; parameters[4].Value = _PageSize; ds = QueryDataTable(); } } return ds; } public int GetTotalCount() { string strSql = " select count(1) from " + _TableName; strSql += " where next = " + Form1.userid + " or Level3 =" + DbHelperSQL.Authority(Form1.userid); return DbHelperSQL.ExecuteScalar(strSql); } }
再附上一個比較簡陋的sql操作
public class DbHelperSQL { public static readonly string connectionString = @""; #region ExecuteNonQuery命令 public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(); return returnReader; } private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; } /// <summary> /// 對數據庫執行增、刪、改命令 /// </summary> /// <param name="safeSql">T-Sql語句</param> /// <returns>受影響的記錄數</returns> public static int ExecuteNonQuery(string safeSql) { using (SqlConnection Connection = new SqlConnection(connectionString)) { Connection.Open(); SqlTransaction trans = Connection.BeginTransaction(); try { SqlCommand cmd = new SqlCommand(safeSql, Connection); cmd.Transaction = trans; if (Connection.State != ConnectionState.Open) { Connection.Open(); } int result = cmd.ExecuteNonQuery(); trans.Commit(); return result; } catch { trans.Rollback(); return 0; } } } public static string GetDocuments(int id) { string strxml = ""; SqlConnection myConn = new SqlConnection(connectionString); myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlstring = "select ID,[CONTENT] from Documents where ID='" + id + "'"; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command = new SqlCommand(sqlstring, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader = command.ExecuteReader(); while (thisReader.Read()) { strxml = thisReader.GetValue(1).ToString(); } //用完后關閉連接,以免影響其他程序訪問 myConn.Close(); return strxml; } public static string NewDocuments() { string strxml = ""; SqlConnection myConn = new SqlConnection(connectionString); myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlstring = "select ID,[CONTENT] from Documents where ID='4'"; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command = new SqlCommand(sqlstring, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader = command.ExecuteReader(); while (thisReader.Read()) { strxml = thisReader.GetValue(1).ToString(); } //用完后關閉連接,以免影響其他程序訪問 myConn.Close(); return strxml; } public static int Count(int id) { int count = -1; SqlConnection myConn = new SqlConnection(connectionString); myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlcount = "select count(*) from Process where next=" + id; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command6 = new SqlCommand(sqlcount, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader6 = command6.ExecuteReader(); while (thisReader6.Read()) { count = int.Parse(thisReader6.GetValue(0).ToString()); } myConn.Close(); return count; } public static int CountUser(string name) { int count = -1; SqlConnection myConn = new SqlConnection(connectionString); myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlcount = "select count(*) from UserTable where Name='" + name + "'"; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command6 = new SqlCommand(sqlcount, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader6 = command6.ExecuteReader(); while (thisReader6.Read()) { count = int.Parse(thisReader6.GetValue(0).ToString()); } myConn.Close(); return count; } public static int NameID(string name) { SqlConnection myConn = new SqlConnection(connectionString); int uid=-1; #region 查詢當前用戶ID myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlstring = "select ID,Name,Authority from UserTable where Name='" + name + "'"; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command = new SqlCommand(sqlstring, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader = command.ExecuteReader(); while (thisReader.Read()) { if ((thisReader.GetValue(1).ToString().Trim()) == (name.ToString().Trim())) { uid = int.Parse(thisReader.GetValue(0).ToString()); } } //用完后關閉連接,以免影響其他程序訪問 myConn.Close(); #endregion return uid; } public static string IDName(int id) { SqlConnection myConn = new SqlConnection(connectionString); string name = ""; myConn.Open(); //將連接打開 string sqlstring = "select ID,Name from UserTable where ID=" + id; SqlCommand command = new SqlCommand(sqlstring, myConn); SqlDataReader thisReader = command.ExecuteReader(); while (thisReader.Read()) { name = thisReader.GetValue(1).ToString(); } myConn.Close(); return name; } public static int Authority(int id) { int authority = -1; string str = @""; SqlConnection myConn = new SqlConnection(str); #region 查詢權限等級 myConn.Open(); //將連接打開 //SQL語句:從數據庫的登錄表中搜索登錄名,密碼 string sqlstring4 = "select ID,Authority from UserTable where ID=" + id; //執行con對象的函數,返回一個SqlCommand類型的對象 SqlCommand command4 = new SqlCommand(sqlstring4, myConn); //用cmd的函數執行語句,返回SqlDataReader對象thisReader,thisReader就是返回的結果集(也就是數據庫中查詢到的表數據) SqlDataReader thisReader4 = command4.ExecuteReader(); while (thisReader4.Read()) { authority = int.Parse(thisReader4.GetValue(1).ToString()); } //用完后關閉連接,以免影響其他程序訪問 myConn.Close(); #endregion return authority; } /// <summary> /// 對數據庫執行增、刪、改命令 /// </summary> /// <param name="sql">T-Sql語句</param> /// <param name="values">參數數組</param> /// <returns>受影響的記錄數</returns> public static int ExecuteNonQuery(string sql, SqlParameter[] values) { using (SqlConnection Connection = new SqlConnection(connectionString)) { Connection.Open(); SqlTransaction trans = Connection.BeginTransaction(); try { SqlCommand cmd = new SqlCommand(sql, Connection); cmd.Transaction = trans; cmd.Parameters.AddRange(values); if (Connection.State != ConnectionState.Open) { Connection.Open(); } int result = cmd.ExecuteNonQuery(); trans.Commit(); return result; } catch (Exception ex) { trans.Rollback(); return 0; } } } #endregion #region ExecuteScalar命令 /// <summary> /// 查詢結果集中第一行第一列的值 /// </summary> /// <param name="safeSql">T-Sql語句</param> /// <returns>第一行第一列的值</returns> public static int ExecuteScalar(string safeSql) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); SqlCommand cmd = new SqlCommand(safeSql, Connection); int result = Convert.ToInt32(cmd.ExecuteScalar()); return result; } } /// <summary> /// 查詢結果集中第一行第一列的值 /// </summary> /// <param name="sql">T-Sql語句</param> /// <param name="values">參數數組</param> /// <returns>第一行第一列的值</returns> public static int ExecuteScalar(string sql, SqlParameter[] values) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); SqlCommand cmd = new SqlCommand(sql, Connection); cmd.Parameters.AddRange(values); int result = Convert.ToInt32(cmd.ExecuteScalar()); return result; } } #endregion #region ExecuteReader命令 /// <summary> /// 創建數據讀取器 /// </summary> /// <param name="safeSql">T-Sql語句</param> /// <param name="Connection">數據庫連接</param> /// <returns>數據讀取器對象</returns> public static SqlDataReader ExecuteReader(string safeSql, SqlConnection Connection) { if (Connection.State != ConnectionState.Open) Connection.Open(); SqlCommand cmd = new SqlCommand(safeSql, Connection); SqlDataReader reader = cmd.ExecuteReader(); return reader; } /// <summary> /// 創建數據讀取器 /// </summary> /// <param name="sql">T-Sql語句</param> /// <param name="values">參數數組</param> /// <param name="Connection">數據庫連接</param> /// <returns>數據讀取器</returns> public static SqlDataReader ExecuteReader(string sql, SqlParameter[] values, SqlConnection Connection) { if (Connection.State != ConnectionState.Open) Connection.Open(); SqlCommand cmd = new SqlCommand(sql, Connection); cmd.Parameters.AddRange(values); SqlDataReader reader = cmd.ExecuteReader(); return reader; } #endregion #region ExecuteDataTable命令 /// <summary> /// 執行指定數據庫連接對象的命令,指定存儲過程參數,返回DataTable /// </summary> /// <param name="type">命令類型(T-Sql語句或者存儲過程)</param> /// <param name="safeSql">T-Sql語句或者存儲過程的名稱</param> /// <param name="values">參數數組</param> /// <returns>結果集DataTable</returns> public static DataTable ExecuteDataTable(CommandType type, string safeSql, params SqlParameter[] values) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(safeSql, Connection); cmd.CommandType = type; SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); return ds.Tables[0]; } } /// <summary> /// 執行指定數據庫連接對象的命令,指定存儲過程參數,返回DataTable /// </summary> /// <param name="safeSql">T-Sql語句</param> /// <returns>結果集DataTable</returns> public static DataTable ExecuteDataTable(string safeSql) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(safeSql, Connection); SqlDataAdapter da = new SqlDataAdapter(cmd); try { da.Fill(ds); } catch (Exception ex) { } return ds.Tables[0]; } } /// <summary> /// 執行指定數據庫連接對象的命令,指定存儲過程參數,返回DataTable /// </summary> /// <param name="sql">T-Sql語句</param> /// <param name="values">參數數組</param> /// <returns>結果集DataTable</returns> public static DataTable ExecuteDataTable(string sql, params SqlParameter[] values) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(sql, Connection); cmd.CommandTimeout = 0; cmd.Parameters.AddRange(values); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); return ds.Tables[0]; } } #endregion #region GetDataSet命令 /// <summary> /// 取出數據 /// </summary> /// <param name="safeSql">sql語句</param> /// <param name="tabName">DataTable別名</param> /// <param name="values"></param> /// <returns></returns> public static DataSet GetDataSet(string safeSql, string tabName, params SqlParameter[] values) { using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(safeSql, Connection); if (values != null) cmd.Parameters.AddRange(values); SqlDataAdapter da = new SqlDataAdapter(cmd); try { da.Fill(ds, tabName); } catch (Exception ex) { } return ds; } } #endregion #region ExecureData 命令 /// <summary> /// 批量修改數據 /// </summary> /// <param name="ds">修改過的DataSet</param> /// <param name="strTblName">表名</param> /// <returns></returns> public static int ExecureData(DataSet ds, string strTblName) { try { //創建一個數據庫連接 using (SqlConnection Connection = new SqlConnection(connectionString)) { if (Connection.State != ConnectionState.Open) Connection.Open(); //創建一個用於填充DataSet的對象 SqlCommand myCommand = new SqlCommand("SELECT * FROM " + strTblName, Connection); SqlDataAdapter myAdapter = new SqlDataAdapter(); //獲取SQL語句,用於在數據庫中選擇記錄 myAdapter.SelectCommand = myCommand; //自動生成單表命令,用於將對DataSet所做的更改與數據庫更改相對應 SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter); return myAdapter.Update(ds, strTblName); //更新ds數據 } } catch (Exception err) { throw err; } } #endregion }