希望大虾,菜鸟都发扬"我为人人,人人为我"的奉献精神,将自己的或者别人的代码贴出来(前提是精彩,实用,精炼)供大家鉴赏学习! 自己抛砖引玉先! :) (最后提醒一点,为了保证自己以后查找的方便,一定要贴代码,而不要是,up,学习,谢谢楼主....之类的话,希望大家认真遵守!) C#中通过查询结果进行分页(转载)通过查询结果进行分页就是以结果集的子集处理查询结果的过程,这样,每次返回给用户的只是当前页面的数据大小。DataAdapter对象通过重载Fill方法提供了返回当前页面数据的功能。然而,这种方法对大数据量的查询结果并不是最好的选择,这是因为:当DataAdapter用请求的结果填充DataTable或者DataSet时,数据库返回的资源仍是全部的查询结果,只是在返回时附加了额外的限定条件才返回了少量的记录集的。要使用Fill方法返回当前一页的记录,需要指定开始记录startRecord,和当前页的最大记录数maxRecords。using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;public class PagingSample: Form
{
// Form 控件.
Button prevBtn = new Button();
Button nextBtn = new Button(); static DataGrid myGrid = new DataGrid();
static Label pageLbl = new Label(); // 分页变量
static int pageSize = 10; // 要显示的页数
static int totalPages = 0; // 总页数
static int currentPage = 0; // 当前页
static string firstVisibleCustomer = ""; // 当前页的第一条记录,用来进行移动“前一页”的定位。
static string lastVisibleCustomer = ""; //当前页的最后条记录,用来进行移动“下一页”的定位。 // DataSet用来绑定到DataGrid.
static DataTable custTable; //初始化连接和DataAdapter.
static SqlConnection nwindConn = new SqlConnection("Data Source=.;Integrated Security=SSPI;Initial Catalog=northwind");
static SqlDataAdapter custDA = new SqlDataAdapter("", nwindConn);
static SqlCommand selCmd = custDA.SelectCommand; public static void GetData(string direction)
{
// 创建返回一页记录的SQL语句
selCmd.Parameters.Clear(); switch (direction)
{
case "下一页":
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers " +
"WHERE CustomerID > @CustomerId ORDER BY CustomerID";
selCmd.Parameters.Add("@CustomerId", SqlDbType.VarChar, 5).Value = lastVisibleCustomer;
break;
case "前一页":
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers " +
"WHERE CustomerID < @CustomerId ORDER BY CustomerID DESC";
selCmd.Parameters.Add("@CustomerId", SqlDbType.VarChar, 5).Value = firstVisibleCustomer;
break;
default:
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers ORDER BY CustomerID";
// 计算总页数
SqlCommand totCMD = new SqlCommand("SELECT Count(*) FROM Customers", nwindConn);
nwindConn.Open();
int totalRecords = (int)totCMD.ExecuteScalar();
nwindConn.Close();
totalPages = (int)Math.Ceiling((double)totalRecords / pageSize); break;
} // 用查询结果填充临时表
DataTable tmpTable = new DataTable("Customers");
int recordsAffected = custDA.Fill(tmpTable); // 如果表不存在,就创建
if (custTable == null)
custTable = tmpTable.Clone(); // 如果有记录返回,就刷新表
if (recordsAffected > 0)
{
switch (direction)
{
case "下一页":
currentPage++;
break;
case "上一页":
currentPage--;
break;
default:
currentPage = 1;
break;
} pageLbl.Text = "第" + currentPage + "/ " + totalPages + "页"; // 清除行集,添加新记录
custTable.Rows.Clear(); foreach (DataRow myRow in tmpTable.Rows)
custTable.ImportRow(myRow); // 保存first 和 last 关键值
DataRow[] ordRows = custTable.Select("", "CustomerID ASC");
firstVisibleCustomer = ordRows[0][0].ToString();
lastVisibleCustomer = ordRows[custTable.Rows.Count - 1][0].ToString();
}
} public PagingSample()
{
// 初始化控件并添加到Form
this.ClientSize = new Size(360, 274);
this.Text = "NorthWind 数据表"; myGrid.Location = new Point(10,10);
myGrid.Size = new Size(340, 220);
myGrid.AllowSorting = true;
myGrid.CaptionText = "NorthWind 客户信息";
myGrid.ReadOnly = true;
myGrid.AllowNavigation = false;
myGrid.PreferredColumnWidth = 150; prevBtn.Text = "前一页";
prevBtn.Size = new Size(60, 24);
prevBtn.Location = new Point(50, 240);
prevBtn.Click += new EventHandler(Prev_OnClick); nextBtn.Text = "下一页";
nextBtn.Size = new Size(60, 24);
nextBtn.Location = new Point(120, 240); pageLbl.Text = "没有记录返回";
pageLbl.Size = new Size(130, 16);
pageLbl.Location = new Point(200, 244); this.Controls.Add(myGrid);
this.Controls.Add(prevBtn);
this.Controls.Add(nextBtn);
this.Controls.Add(pageLbl);
nextBtn.Click += new EventHandler(Next_OnClick);
// 计算默认的第一页,并进行绑定
GetData("Default");
DataView custDV = new DataView(custTable, "", "CustomerID", DataViewRowState.CurrentRows);
myGrid.SetDataBinding(custDV, "");
} public static void Prev_OnClick(object sender, EventArgs args)
{
GetData("前一页");
} public static void Next_OnClick(object sender, EventArgs args)
{
GetData("下一页");
}
}public class Sample
{
static void Main()
{
Application.Run(new PagingSample());
}
}
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;public class PagingSample: Form
{
// Form 控件.
Button prevBtn = new Button();
Button nextBtn = new Button(); static DataGrid myGrid = new DataGrid();
static Label pageLbl = new Label(); // 分页变量
static int pageSize = 10; // 要显示的页数
static int totalPages = 0; // 总页数
static int currentPage = 0; // 当前页
static string firstVisibleCustomer = ""; // 当前页的第一条记录,用来进行移动“前一页”的定位。
static string lastVisibleCustomer = ""; //当前页的最后条记录,用来进行移动“下一页”的定位。 // DataSet用来绑定到DataGrid.
static DataTable custTable; //初始化连接和DataAdapter.
static SqlConnection nwindConn = new SqlConnection("Data Source=.;Integrated Security=SSPI;Initial Catalog=northwind");
static SqlDataAdapter custDA = new SqlDataAdapter("", nwindConn);
static SqlCommand selCmd = custDA.SelectCommand; public static void GetData(string direction)
{
// 创建返回一页记录的SQL语句
selCmd.Parameters.Clear(); switch (direction)
{
case "下一页":
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers " +
"WHERE CustomerID > @CustomerId ORDER BY CustomerID";
selCmd.Parameters.Add("@CustomerId", SqlDbType.VarChar, 5).Value = lastVisibleCustomer;
break;
case "前一页":
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers " +
"WHERE CustomerID < @CustomerId ORDER BY CustomerID DESC";
selCmd.Parameters.Add("@CustomerId", SqlDbType.VarChar, 5).Value = firstVisibleCustomer;
break;
default:
selCmd.CommandText = "SELECT TOP " + pageSize + " CustomerID, CompanyName FROM Customers ORDER BY CustomerID";
// 计算总页数
SqlCommand totCMD = new SqlCommand("SELECT Count(*) FROM Customers", nwindConn);
nwindConn.Open();
int totalRecords = (int)totCMD.ExecuteScalar();
nwindConn.Close();
totalPages = (int)Math.Ceiling((double)totalRecords / pageSize); break;
} // 用查询结果填充临时表
DataTable tmpTable = new DataTable("Customers");
int recordsAffected = custDA.Fill(tmpTable); // 如果表不存在,就创建
if (custTable == null)
custTable = tmpTable.Clone(); // 如果有记录返回,就刷新表
if (recordsAffected > 0)
{
switch (direction)
{
case "下一页":
currentPage++;
break;
case "上一页":
currentPage--;
break;
default:
currentPage = 1;
break;
} pageLbl.Text = "第" + currentPage + "/ " + totalPages + "页"; // 清除行集,添加新记录
custTable.Rows.Clear(); foreach (DataRow myRow in tmpTable.Rows)
custTable.ImportRow(myRow); // 保存first 和 last 关键值
DataRow[] ordRows = custTable.Select("", "CustomerID ASC");
firstVisibleCustomer = ordRows[0][0].ToString();
lastVisibleCustomer = ordRows[custTable.Rows.Count - 1][0].ToString();
}
} public PagingSample()
{
// 初始化控件并添加到Form
this.ClientSize = new Size(360, 274);
this.Text = "NorthWind 数据表"; myGrid.Location = new Point(10,10);
myGrid.Size = new Size(340, 220);
myGrid.AllowSorting = true;
myGrid.CaptionText = "NorthWind 客户信息";
myGrid.ReadOnly = true;
myGrid.AllowNavigation = false;
myGrid.PreferredColumnWidth = 150; prevBtn.Text = "前一页";
prevBtn.Size = new Size(60, 24);
prevBtn.Location = new Point(50, 240);
prevBtn.Click += new EventHandler(Prev_OnClick); nextBtn.Text = "下一页";
nextBtn.Size = new Size(60, 24);
nextBtn.Location = new Point(120, 240); pageLbl.Text = "没有记录返回";
pageLbl.Size = new Size(130, 16);
pageLbl.Location = new Point(200, 244); this.Controls.Add(myGrid);
this.Controls.Add(prevBtn);
this.Controls.Add(nextBtn);
this.Controls.Add(pageLbl);
nextBtn.Click += new EventHandler(Next_OnClick);
// 计算默认的第一页,并进行绑定
GetData("Default");
DataView custDV = new DataView(custTable, "", "CustomerID", DataViewRowState.CurrentRows);
myGrid.SetDataBinding(custDV, "");
} public static void Prev_OnClick(object sender, EventArgs args)
{
GetData("前一页");
} public static void Next_OnClick(object sender, EventArgs args)
{
GetData("下一页");
}
}public class Sample
{
static void Main()
{
Application.Run(new PagingSample());
}
}
解决方案 »
- 问:如何关闭 timer 控件 ?
- DataGridView 自定义columnType列问题
- 如何对输入的数字排序 ,保存到动态数组C# 如,8366,45,123,789
- 紧急求助!DataGridView动态表的生成
- 数据库更新问题.
- 在LISTVIEW中,mouseup事件丢失
- 加群69161441 我们一起讨论学习中遇到的困难
- WinForm程序,可编辑下拉列表中输入文本,然后用Tab键跳转到下一个控件,发现刚才下拉列表的值变为空了,怎么解决?
- grideview里checkbox的checkedchanged事件
- 刚学C#有个小问题,等待中。。。
- form1窗体怎样才能在另一窗体中当子窗体显示
- |_*>>>>关于用户控件中的事件问题<<<<*_|
{
return a>b?a:b;
}
解决思路:参考了.net的例子PetShop后,决定选用Session变量存储对象实例的方式解决
具体代码:
1、数据处理基类
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Diagnostics;
using System.Collections;
using System.ComponentModel;namespace library.Components
{
/// <summary>
/// 所有数据处理的基类。
/// </summary>
public class Data
{
protected OleDbConnection conn;
protected OleDbDataAdapter myAdapter;
protected OleDbCommand myCommand;
/// <summary>
/// 建立数据库连接。
/// </summary>
protected void Open()
{
if (conn == null)
{
conn = new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
conn.Open();
}
}
/// <summary>
/// 关闭数据库连接。
/// </summary>
protected void Close()
{
if (conn != null)
conn.Close();
}
/// <summary>
/// 释放连接资源。
/// </summary>
protected void Distroy()
{
if (conn != null)
{
// conn.Dispose();
conn = null;
}
}
}
}
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Diagnostics;
using System.Collections;
using System.ComponentModel;
using library.Components;namespace library.Components
{
/// <summary>
/// myFocus 的摘要说明。
/// </summary>
public class myFocus : Data
{
private DataTable FocusTable;
public myFocus()
{
if (FocusTable == null)
{
FocusTable = new DataTable();
FocusTable.Columns.Add("REG_NUM");
FocusTable.Columns.Add("NAME");
FocusTable.Columns.Add("AUTHORS");
FocusTable.Columns.Add("TYPE_NAME");
FocusTable.Columns.Add("COUNT");
FocusTable.Columns.Add("OUT_COUNT");
}
}
/// <summary>
/// 加入我的关注。
/// </summary>
/// <param name="regNum">书籍注册码。</param>
public void AddItem(string regNum)
{
Open();
DataRow newRow = FocusTable.NewRow();
OleDbDataReader myReader = null;
string sqlStr = "Select REG_NUM, NAME, AUTHORS, COUNT, OUT_COUNT, TYPE_NAME From V_STY_LIBRARY_BOOKS Where REG_NUM='"+regNum+"'"; myCommand = new OleDbCommand(sqlStr, conn);
myReader = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
if (myReader.Read())
{
newRow["REG_NUM"] = myReader["REG_NUM"].ToString();
newRow["NAME"] = myReader["NAME"].ToString();
newRow["AUTHORS"] = myReader["AUTHORS"].ToString();
newRow["TYPE_NAME"] = myReader["TYPE_NAME"].ToString();
newRow["COUNT"] = myReader["COUNT"].ToString();
newRow["OUT_COUNT"] = myReader["OUT_COUNT"].ToString();
}
FocusTable.Rows.Add(newRow); myReader.Close();
Distroy();
}
/// <summary>
/// 从我的关注中移除项目。
/// </summary>
/// <param name="regNum">书籍这册码。</param>
public void RemoveItem(string regNum)
{
for (int i=0; i<FocusTable.Rows.Count; i++)
{
if (FocusTable.Rows[i]["REG_NUM"].ToString() == regNum)
FocusTable.Rows.Remove(FocusTable.Rows[i]);
}
}
/// <summary>
/// 获得数据源即DataTable。
/// </summary>
/// <returns>FocusTable</returns>
public DataTable getDataTable()
{
return this.FocusTable;
}
/// <summary>
/// 获得我的关注中的记录数目。
/// </summary>
/// <returns>返回DataTable的行数。</returns>
public int getFocusNum()
{
return FocusTable.Rows.Count;
}
}
}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using library.Components.allUse;
using library.Components;namespace library
{
/// <summary>
/// MyAttention 的摘要说明。
/// </summary>
public class MyAttention : System.Web.UI.Page
{
protected myControl.myButton butDelete;
protected System.Web.UI.WebControls.Button butAddCase;
protected System.Web.UI.WebControls.Button butApply;
protected System.Web.UI.WebControls.DataGrid ListView;
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
//确定用户拥有关注集合。
if (Session["myAttention"] == null)
Session["myAttention"] = new myFocus();
if (Request.QueryString["action"]=="purchaseItem")
{
myFocus tempFocus = (myFocus)Session["myAttention"];
string regNum = Request.QueryString["regNum"];
bool existFlag = true;
show showMsg = new show();
foreach (DataRow tempRow in tempFocus.getDataTable().Rows)
{
if (tempRow["REG_NUM"].ToString() == regNum)
existFlag = false;
}
if (existFlag)
this.AddItem(regNum);
else
showMsg.showMessage(this.Response, "您选择的记录已存在!");
}
ShowAttention();
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ListView.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.ListView_PageIndexChanged);
this.butDelete.Click += new System.EventHandler(this.butDelete_Click);
this.butAddCase.Click += new System.EventHandler(this.butAddCase_Click);
this.butApply.Click += new System.EventHandler(this.butApply_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
/// <summary>
/// 将书籍加入我的关注。
/// </summary>
/// <param name="regNum">书籍注册码。</param>
public void AddItem(string regNum)
{
myFocus tempFocus = (myFocus)Session["myAttention"];
tempFocus.AddItem(regNum);
}
/// <summary>
/// 绑定DataGrid以显示关注图书。
/// </summary>
public void ShowAttention()
{
myFocus focus = (myFocus)Session["myAttention"];
ListView.DataSource = focus.getDataTable().DefaultView;
ListView.DataBind();
} private void butDelete_Click(object sender, System.EventArgs e)
{
myFocus focus = (myFocus)Session["myAttention"];
foreach (DataGridItem dgi in ListView.Items)
{
CheckBox cb = (CheckBox)(dgi.Cells[5].Controls[1]);
HtmlInputHidden hd = (HtmlInputHidden)(dgi.FindControl("hdRegNum"));
if (cb.Checked)
focus.RemoveItem(hd.Value);
}
if (focus.getFocusNum() <= ListView.CurrentPageIndex * ListView.PageSize && focus.getFocusNum() > 0)
{
ListView.CurrentPageIndex--;
}
ShowAttention();
} private void butAddCase_Click(object sender, System.EventArgs e)
{
myFocus focus = (myFocus)Session["myAttention"];
Books books = new Books();
show showMsg = new show();
string cardID, message;
int UpNum = 0;
int checkNum = 0;
int nuUpNum = 0;
if (Session["UserID"] != null)
{
cardID = Session["UserID"].ToString();
foreach (DataGridItem dgi in ListView.Items)
{
CheckBox cb = (CheckBox)(dgi.Cells[5].Controls[1]);
HtmlInputHidden hd = (HtmlInputHidden)(dgi.FindControl("hdRegNum"));
if (cb.Checked)
{
if (books.AddBookToCase(cardID, hd.Value) != -1)
{
UpNum++;
}
checkNum++;
}
}
if (UpNum == checkNum)
{
message = "共有"+UpNum.ToString()+"条记录加入收藏夹!";
}
else
{
nuUpNum = checkNum - UpNum;
message = "共有"+UpNum.ToString()+"条记录加入收藏夹!"+"(其余"+nuUpNum.ToString()+"条已存在于您的收藏夹内)";
}
showMsg.showMessage(Response, message);
}
else
{
Response.Redirect("Login.aspx?tempUrl=MyAttention.aspx");
}
ShowAttention();
}
private void butApply_Click(object sender, System.EventArgs e)
{
myFocus focus = (myFocus)Session["myAttention"];
Books books = new Books();
Item item = new Item();
show showMsg = new show();
string cardID,isbn, message;
int UpNum = 0;
int checkNum = 0;
int nuUpNum = 0;
if (Session["UserID"] != null)
{
cardID = Session["UserID"].ToString();
foreach (DataGridItem dgi in ListView.Items)
{
CheckBox cb = (CheckBox)(dgi.Cells[5].Controls[1]);
HtmlInputHidden hd = (HtmlInputHidden)(dgi.FindControl("hdRegNum"));
if (cb.Checked)
{
if (books.CheckBookCount(hd.Value))
{
isbn = books.GetIsbn(hd.Value);
if (item.AddApply(cardID, isbn) != -1)
{
UpNum++;
}
}
checkNum++;
}
}
if (UpNum == checkNum)
{
message = "共有"+UpNum.ToString()+"条申请发出!";
}
else
{
nuUpNum = checkNum - UpNum;
message = "共有"+UpNum.ToString()+"条申请发出!"+"(其余"+nuUpNum.ToString()+"条记录的申请已存在或书籍以无库存)";
}
showMsg.showMessage(Response, message);
}
else
{
Response.Redirect("Login.aspx?tempUrl=MyAttention.aspx");
}
ShowAttention();
} private void ListView_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
ListView.CurrentPageIndex = e.NewPageIndex;
ShowAttention();
}
}
}
/// 服务器端弹出alert对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"请输入您姓名!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Message,Page page)
{
if(!page.IsStartupScriptRegistered ("msgOnlyAlert"))
{
page.RegisterStartupScript("msgOnlyAlert","<script>alert('"+str_Message+"');</script>");
}
}
/// <summary>
/// 服务器端弹出alert对话框,并使控件获得焦点
/// </summary>
/// <param name="str_Ctl_Name">获得焦点控件Id值,比如:txt_Name</param>
/// <param name="str_Message">提示信息,例子:"请输入您姓名!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Ctl_Name,string str_Message,Page page)
{
if(!page.IsStartupScriptRegistered ("msgAlertGetFocus"))
{
page.RegisterStartupScript("msgAlertGetFocus","<script>alert('"+str_Message+"');document.forms(0)."+str_Ctl_Name+".focus(); document.forms(0)."+str_Ctl_Name+".select();</script>");
}
}
/// <summary>
/// 服务器端弹出confirm对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"您是否确认删除!"</param>
/// <param name="btn">隐藏Botton按钮Id值,比如:btn_Flow</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn,Page page)
{
if(!page.IsStartupScriptRegistered ("msgConfirmOK"))
{
page.RegisterStartupScript("msgConfirmOK","<script> if (confirm('"+str_Message+"')==true){document.forms(0)."+btn+".click();}</script>");
}
}
// /// <summary>
// /// 服务器端弹出confirm对话框,当点“取消”时执行按钮操作,点确定时继续执行
// /// </summary>
// /// <param name="str_Message">提示信息,例子:"您是否确认删除!"</param>
// /// <param name="btn">隐藏Botton按钮Id值,比如:btn_Flow</param>
// /// <param name="page">Page类</param>
// public void CancelConfirm(string str_Message,string btn,Page page)
// {
// page.RegisterStartupScript("","<script> if (confirm('"+str_Message+"')==false){document.forms(0)."+btn+".click();}</script>");
// }
/// <summary>
/// 服务器端弹出confirm对话框,询问用户准备转向那些操作,包括“确定”和“取消”时的操作
/// </summary>
/// <param name="str_Message">提示信息,比如:"成功增加数据,单击\"确定\"按钮填写流程,单击\"取消\"修改数据"</param>
/// <param name="btn_Redirect_Flow">"确定"按钮id值</param>
/// <param name="btn_Redirect_Self">"取消"按钮id值</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn_Redirect_Flow,string btn_Redirect_Self,Page page)
{
if(!page.IsStartupScriptRegistered ("msgConfirmOKCancel"))
{
page.RegisterStartupScript("msgConfirmOKCancel","<script> if (confirm('"+str_Message+"')==true){document.forms(0)."+btn_Redirect_Flow+".click();}else{document.forms(0)."+btn_Redirect_Self+".click();}</script>");
}
}
public static string GetMac()
{
System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
System.Management.ManagementObjectCollection moc = mc.GetInstances();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
sb.Append(mo["MacAddress"].ToString());
mo.Dispose();
}
return(sb.ToString());
}调用:Console.Write(ClassName.GetMac());
结果:00:E0:4C:0D:01:73
DateTime t2 = new DateTime(2002,5,23);
TimeSpan diff=t1-t2;
MessageBox.Show(diff.Days.ToString());
说我们贴的是垃圾,那你到是贴点不垃圾的啊,鄙视!!!
http://www.cnblogs.com/rexsp/archive/2004/12/27/82740.html
using System;
using System.Data;
using System.Data.SqlClient;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace web.inc
{
/// <summary>
/// Database 的摘要说明。
/// </summary>
public class Database: IDisposable
{
public Database()
{
//
// TODO: 在此处添加构造函数逻辑
//
} private SqlConnection conn ;
public int RunProc(string procName)
{
SqlCommand cmd = CreateCommand(procName, null);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回存储过程返回值</returns>
public int RunProc(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateCommand(procName, prams);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="dataReader">返回存储过程返回值</param>
public void RunProc(string procName, out SqlDataReader dataReader)
{
SqlCommand cmd = CreateCommand(procName, null);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
//return (int)cmd.Parameters["ReturnValue"].Value;
} public SqlCommand RtnData(string procName)
{
SqlCommand cmd= CreateCommand(procName, null);
return cmd;
} public SqlCommand RtnDataPar(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateCommand(procName, prams);
return cmd;
//dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <param name="dataReader">存储过程所需参数</param>
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
{
SqlCommand cmd = CreateCommand(procName, prams);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
//return (int)cmd.Parameters["ReturnValue"].Value;
}
/// <summary>
/// 创建一个SqlCommand对象以此来执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回SqlCommand对象</returns>
private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
{
// 确认打开连接
Open();
SqlCommand cmd = new SqlCommand(procName, conn);
cmd.CommandType = CommandType.StoredProcedure; // 依次把参数传入存储过程
if (prams != null)
{
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
// 加入返回参数
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)); return cmd;
} /// <summary>
/// 打开数据库连接.
/// </summary>
private void Open()
{
// 打开数据库连接
if (conn == null)
{
conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
}
if(conn.State ==System.Data.ConnectionState.Closed)
{
conn.Open();
}
} /// <summary>
/// 关闭数据库连接
/// </summary>
public void Close()
{
if (conn != null)
conn.Close();
} /// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
// 确认连接是否已经关闭
if (conn != null)
{
conn.Dispose();
conn = null;
}
} /// <summary>
/// 传入输入参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param></param>
/// <param name="Size">参数大小</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
} /// <summary>
/// 传入返回值参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
} /// <summary>
/// 传入返回值参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
}
/// <summary>
/// 生成存储过程参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <param name="Direction">参数方向</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
SqlParameter param; if(Size > 0)
param = new SqlParameter(ParamName, DbType, Size);
else
param = new SqlParameter(ParamName, DbType); param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value; return param;
} }
}
印尼亚齐省劫掠现象严重华人成为抢劫目标http://news.sina.com.cn/c/2005-01-03/18414704205s.shtml
港报呼吁印尼当局制止歹徒趁乱抢掠华人恶行
http://www.csharpproject.com/articles/aspnet/images_multimedia/SimImage.aspx
单选按钮在DataGrid中的实现
http://www.csharpproject.com/articles/aspnet/aspnet_controls/radiobutton_grid.aspx
简单实现多选框下拉列表
http://www.csharpproject.com/articles/aspnet/custom_controls/ComboCheckBoxList.aspx
颜色选择列表的实现
http://www.csharpproject.com/articles/winforms/combo_listboxes/ColorComboBox.aspx
设计模式应用例子一则
http://www.csharpproject.com/articles/winforms/general/rolepanel.aspx
开源代码分享站
当您注册后,您将可以投稿和阅读CSharpProject的文章,讨论CSharpProject的问题,并且可以免费下载CSharpProject的所有资源,以及获得参与CSharpProject开发的机会。相信不久的将来,这里将汇集全中国的.NET 技术精英。
using System;
using System.Data; //使用DataTable
using System.Data.OleDb;//使用ADO.NET
using System.Data.SqlTypes;//使用SQL的类型/****************************************************************
* 本类库提供ADO.NET的基本操作
* 可以实现对数据库的select ,insert into ,update,delete,create table等操作
* 本库中的接口 IJetsenDatabaseInterface 只针对一个数据库进行操作,不能跨数据库操作
* 作者:周高敏
* 日期:2005-1-13
* 版权:共享
* 版本:v1.0
***************************************************************/
namespace DB_Interface
{
/// <summary>
/// 数据库某种类型的数据的结构,
/// 该类仅用于数据存储,不用于数据操作,
/// 相当于 struct
/// </summary>
public class DB_FieldData
{
/// <summary>
/// 数据类型(数据库表字段的简化类型)
/// </summary>
public enum DATA_TYPE
{
/// <summary>
/// 数字类型 ,对应的变量是 lData32
/// </summary>
DB_DATA_LONG = 1 ,
/// <summary>
/// 时间类型 ,对应的变量是 tData
/// </summary>
DB_DATA_DATE ,
/// <summary>
/// 字符串类型 ,对应的变量是 sData
/// </summary>
DB_DATA_STRING ,
/// <summary>
/// 64位数字类型,对应的变量是 lData64
/// </summary>
DB_DATA_LONGLONG
};//数据类型 /// <summary>
/// 标识从数据库中读出的字段数据的类型
/// </summary>
public DATA_TYPE type;
/// <summary>
/// 表示小于等于32位的整型数据变量
/// </summary>
public SqlInt32 lData32;
/// <summary>
/// 表示时间数据变量
/// </summary>
public SqlDateTime tData;
/// <summary>
/// 表示字符串数据变量
/// </summary>
public SqlString sData;
/// <summary>
/// 表示 64 位的整型数据变量
/// </summary>
public SqlInt64 lData64;
}//class DB_FieldData /// <summary>
/// 数据库操作的接口创建工厂类
/// </summary>
public class JetsenDatabaseFactory
{
/// <summary>
/// 获取数据库操作的接口
/// </summary>
/// <returns>返回一个新创建的数据库操作接口 IJetsenDatabaseInterface</returns>
public IJetsenDatabaseInterface GetNewInstance()
{
return new DB_Application();
}
} /// <summary>
/// 数据库操作的接口声明
/// </summary>
public interface IJetsenDatabaseInterface
{
/// <summary>
/// 获取最后一次出错的字符串信息
/// </summary>
String theLastErrorString
{
get;
} /// <summary>
/// 打开数据库连接,
/// 如果已经打开,则先关闭
/// </summary>
/// <param name="strConn">连接字符串 比如 ACCESS 的ADO连接字符串 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False"</param>
/// <returns>0 失败 ; other 成功</returns>
int Open(String strConn); /// <summary>
/// 关闭数据库连接
/// </summary>
void Close(); /// <summary>
/// 开始事务,
/// 不支持欠套事务
/// </summary>
/// <returns>0 失败 ; other 成功</returns>
int BeginTrans(); /// <summary>
/// 提交事务
/// </summary>
/// <returns>0 失败 ; other 成功</returns>
int CommitTrans(); /// <summary>
/// 回滚事务
/// </summary>
void RollbackTrans(); /// <summary>
/// 通过SQL查询,获取行集数据开始
/// 只针对查询SQL
/// </summary>
/// <param name="strSql">输入,查询字符串</param>
/// <returns>0 失败 ; 其他 成功</returns>
int BeginGetCollect(String strSql); /// <summary>
/// 获取行集数据结束
/// </summary>
void EndGetCollect(); /// <summary>
/// 获取一条行集数据,并且移到下一条行集
/// </summary>
/// <param name="vFieldName">输出,用于获取该SQL查询获得的字段列表名</param>
/// <param name="vRowSet">输出,获取到的行集数据</param>
/// <returns>0 失败 ; 其他 表示字段的实际个数,注意:vFieldName的长度表示数据库表的字段的个数,两者不一定一致,比如表中有BLOB字段就不一致</returns>
int NextGetCollect(out String[] vFieldName/*字段名称列表*/,out DB_FieldData[] vRowSet/*行集数据*/);
/// <summary>
/// 插入一条行集数据,
/// 关键字由参数传入
/// </summary>
/// <param name="vTableName">数据库表名</param>
/// <param name="vFieldName">字段名称列表</param>
/// <param name="vRowSet">行集数据</param>
/// <returns>0 失败 ; 其他 成功</returns>
int InsertOneCollect(String vTableName/*数据库表名*/,ref String[] vFieldName/*字段名称列表*/,ref DB_FieldData[] vRowSet/*行集数据*/);
/// <summary>
/// 插入一条行集,关键字需要自动创建
/// </summary>
/// <param name="vTableName">数据库表名</param>
/// <param name="vKeyIndex">关键字位置索引</param>
/// <param name="vFieldName">字段名称列表</param>
/// <param name="vRowSet">行集数据,引用类型,既是输入又是输出,输出时,关键字位置的值被更改</param>
/// <returns>0 失败 ; 其他 成功</returns>
int InsertOneCollect_AutoNewID(String vTableName/*数据库表名*/,uint vKeyIndex/*关键字位置索引*/,ref String[] vFieldName/*字段名称列表*/,ref DB_FieldData[] vRowSet/*行集数据*/);
/// <summary>
/// 更新一条行集数据,
/// </summary>
/// <param name="vTableName">数据库表名</param>
/// <param name="vKeyIndex">关键字位置索引,负数表示不使用该索引</param>
/// <param name="vKeyIndex2">关键字位置索引,负数表示不使用该索引</param>
/// <param name="vKeyIndex3">关键字位置索引,负数表示不使用该索引</param>
/// <param name="vFieldName">字段名称列表</param>
/// <param name="vRowSet">行集数据</param>
/// <returns>0 失败 ; 其他 成功</returns>
int UpdateOneCollect(String vTableName/*数据库表名*/,int vKeyIndex/*关键字位置索引*/,int vKeyIndex2/*关键字位置索引*/,int vKeyIndex3/*关键字位置索引*/,ref String[] vFieldName/*字段名称列表*/,ref DB_FieldData[] vRowSet/*行集数据*/);
/// <summary>
/// 执行一个sql语句
/// </summary>
/// <param name="strSql">sql字符串</param>
/// <returns>0 失败 ; 其他 成功</returns>
int ExecuteSql(String strSql); }//end of IJetsenDatabaseInterface
/// <summary>
/// 实现数据库的表操作
/// 比如 select ,insert ,update ,delete 等
/// </summary>
internal class DB_Application : IJetsenDatabaseInterface
{
private OleDbConnection m_OleDb; //数据库连接实例
private OleDbTransaction m_OleTrans; //数据库事务处理实例
private OleDbDataReader m_OleReader; //一个SQL查询的实例
private OleDbCommand m_OleCommand; //一个SQL查询的执行实例
private String m_ErrorString;//程序调用最后一次发生异常的错误串
/// <summary>
/// 获取最后一次出错的字符串信息
/// </summary>
public String theLastErrorString
{
get
{
return m_ErrorString;
}
} /// <summary>
/// 获取数据库连接实例
/// </summary>
public OleDbConnection OleConnectionInstance
{
get
{
return m_OleDb;
}
} /// <summary>
/// <para>默认构造函数不打开数据库</para>
/// <para>需要使用Open方法打开数据库才能进一步操作数据库</para>
/// </summary>
public DB_Application()
{
//
// TODO: 在此处添加构造函数逻辑
//
m_OleDb = new OleDbConnection();
} /// <summary>
/// 通过构造函数打开数据库
/// </summary>
/// <param name="strConn">ADO连接字符串 比如 ACCESS 连接字符串 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False"</param>
public DB_Application(String strConn)
{
//
// TODO: 在此处添加构造函数逻辑
//
try
{
m_OleDb = new OleDbConnection(strConn);//新建连接
m_OleDb.Open();//打开数据库 }
catch(Exception ee)
{
m_ErrorString = "DB_Application:consructor:error:" + ee.Message;
}
} /// <summary>
/// 打开数据库连接,
/// 如果已经打开,则先关闭
/// </summary>
/// <param name="strConn">ADO连接字符串 比如 ACCESS 连接字符串 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False"</param>
/// <returns>0 失败 ; other 成功</returns>
public int Open(String strConn)
{
try
{
m_OleDb.Close();//关闭连接
}
catch
{
} try
{
m_OleDb = new OleDbConnection(strConn);//新建连接
m_OleDb.Open();//打开数据库 return 1;
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:Open:error:" + ee.Message;
return 0;
} }
/// 重新打开数据库连接,
/// 如果已经打开,则先关闭
/// 注意:基于以前已经传入的ADO连接字符串重新打开
/// </summary>
/// <returns>0 失败 ; other 成功</returns>
public int Reopen()
{
try
{
m_OleDb.Close();//关闭连接
}
catch
{
} try
{
m_OleDb.Open();//打开数据库 return 1;
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:Reopen:error:" + ee.Message;
return 0;
} } /// <summary>
/// 关闭数据库连接
/// </summary>
public void Close()
{
try
{
m_OleDb.Close();//关闭连接
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:Close:error:" + ee.Message;
}
} /// <summary>
/// 开始事务,
/// 不支持欠套事务
/// </summary>
/// <returns>0 失败 ; other 成功</returns>
public int BeginTrans()
{
try
{
m_OleTrans = m_OleDb.BeginTransaction();//开始事务
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:BeginTrans:error:" + ee.Message;
return 0;
} return 1;
} /// <summary>
/// 提交事务
/// </summary>
/// <returns>0 失败 ; other 成功</returns>
public int CommitTrans()
{
try
{
m_OleTrans.Commit();//提交事务
m_OleTrans = null;
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:CommitTrans:error:" + ee.Message;
return 0;
} return 1;
} /// <summary>
/// 回滚事务
/// </summary>
public void RollbackTrans()
{
try
{
m_OleTrans.Rollback();//回滚事务
m_OleTrans = null;
}
catch(Exception ee)
{
m_ErrorString = "DB_Application:RollbackTrans:error:" + ee.Message;
} } /// <summary>
/// 通过SQL查询,获取行集数据开始
/// 只针对查询SQL
/// </summary>
/// <param name="strSql">输入,查询字符串</param>
/// <returns>0 失败 ; 其他 成功</returns>
public int BeginGetCollect(String strSql)
{
try
{
m_OleCommand = m_OleDb.CreateCommand();//创建一个执行对象用于执行sql查询
m_OleCommand.CommandText = strSql;
m_OleCommand.Transaction = m_OleTrans; m_OleReader = m_OleCommand.ExecuteReader();//执行sql查询 }
catch(Exception ee)
{
m_ErrorString = "DB_Application:BeginGetCollect:error:" + ee.Message;
return 0;
}
return 1;
} /// <summary>
/// 获取行集数据结束
/// </summary>
public void EndGetCollect()
{
try
{
m_OleReader.Close();
m_OleReader = null;
m_OleCommand = null; }
catch(Exception ee)
{
m_ErrorString = "DB_Application:EndGetCollect:error:" + ee.Message;
}
}