1、我想通过查找,在dataset中定位一条记录。
2、如何遍力数据集,像bcb中,
while(dataset->Eof())
{
//do something;
dataset->MoveNext();
}
2、如何遍力数据集,像bcb中,
while(dataset->Eof())
{
//do something;
dataset->MoveNext();
}
解决方案 »
- 请问一下有一个对象, 怎样复制他呢, 而不是获得对象的引用
- 救命!!!
- 请教 访问SqlServer2005 Report Services问题
- c#如何连接ftp服务器?
- 关于用c#编写视频音频捕捉程序,用过DirectShow.NET或者对.NET里面调用Com很熟悉的朋友请进
- 帮忙写个获取IP地址的正则表达式,谢谢
- 跟VFP报表设计器一样好的.NET报表设计器在哪里?地球人都不知道!
- 本人求 关于VC VC.NET C#的访问管理SQL的教程!!!
- 学习C#有一段时间了,小弟有两件事不明白,求教。
- C#调用存储过程。要代码
- 数组空间分配问题:arr=new int[10];arr[1]=5;以后想把空间扩大到20,并保存原空间数据,我用arr=new int[20];arr[1]的数据没了。
- [100分]关于数据绑定的addnew()方法的问题!急,请各位高手指教!
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using ProductLine.PubUtilities;
using ProductLine.PubComponents;namespace ProductLine.DataAccess
{
/// <summary>
/// Summary description for DataBuffer.
/// </summary>
public class DataBuffer
{
public DataBuffer()
{
m_nIndex = -1;
}
//数据库相关的局部变量
protected Int32 m_nIndex;
protected System.Data.OleDb.OleDbConnection m_conn;
protected System.Data.OleDb.OleDbDataAdapter m_da;
protected System.Data.OleDb.OleDbCommandBuilder m_cb;
protected System.Data.DataTable m_dt;
protected System.Data.DataRow m_dr;
protected System.Data.DataSet m_ds;
private System.Data.DataView m_dv;
private System.Data.DataRowView m_drv;
protected string m_tableName;
string m_sql; #region 数据缓冲集操作:移动、增、删、改、查
/// <summary>
/// 移动到记录集开始
/// </summary>
public void RecMoveFirst()
{
m_nIndex = 0;
} /// <summary>
/// 移动到记录集末尾
/// </summary>
public void RecMoveLast()
{
m_nIndex = m_dv.Count -1;
} /// <summary>
/// 向前移动一个记录
/// </summary>
public void RecMovePrev()
{
if(m_nIndex>0)
m_nIndex --;
} /// <summary>
/// 向后移动一个记录
/// </summary>
public void RecMoveNext()
{
if(m_nIndex < m_dv.Count-1)
m_nIndex ++;
} /// <summary>
/// 新增一条记录
/// </summary>
public bool RecInsert()
{
DataRowView drv = m_dv.AddNew();
drv.BeginEdit();
drv.EndEdit();
m_nIndex = m_dv.Count -1;
return true;
} /// <summary>
/// 删除当前记录
/// </summary>
public bool RecDelete()
{
try
{
m_dv.Delete(m_nIndex);
}
catch(System.Data.OleDb.OleDbException e )
{
System.Windows.Forms.MessageBox.Show(e.Message);
} return true;
}
#endregion #region 数据库操作:打开、关闭、读(加载、刷新)、写
// /// <summary>
// ///
// /// </summary>
// /// <param name="conn"></param>
// /// <param name="dataAdapter"></param>
// /// <param name="cb"></param>
// /// <param name="dt"></param>
// /// <param name="ds"></param>
// /// <param name="tableName"></param>
// /// <param name="recStatus"></param>
// /// <param name="nIndex"></param>
// /// <returns></returns>
// public bool SetVariables(OleDbConnection conn,
// OleDbDataAdapter dataAdapter,
// OleDbCommandBuilder cb,
// DataSet ds,
// string tableName,
// Int32 nIndex
// )
// {
// if(conn != null) m_conn = conn;
// if(dataAdapter != null) m_da = dataAdapter;
// if(cb != null) m_cb = cb;
// if(ds != null) m_ds = ds;
// m_tableName = tableName;
// m_nIndex = nIndex;
// m_dt = m_ds.Tables[tableName];
// if (m_dt != null)
// {
// m_dv = m_dt.DefaultView ;
// m_dv.AllowDelete = true;
// m_dv.AllowEdit = true;
// m_dv.AllowNew = true;
// }
// return true;
// } /// <summary>
/// 关闭数据集
/// </summary>
public bool RecClose()
{
if(!UtilDB.CloseObject(m_da)) return false;
if(!UtilDB.CloseObject(m_ds)) return false;
return true;
} /// <summary>
/// 刷新记录集,从数据库中的同步数据
/// </summary>
/// <param name="conn">已初始化的连接</param>
/// <param name="strSql">SQL语句(一般情况下为Select语句)</param>
/// <param name="strTableName">记录集中的表名</param>
/// <returns>true:成功 false:失败</returns>
public bool LoadData(OleDbConnection conn,string strSql,string strTableName)
{
try
{
if(null != conn)
{
m_conn = conn;
m_ds = new DataSet();
m_da = new OleDbDataAdapter(strSql,m_conn);
m_cb = new OleDbCommandBuilder(m_da);
m_tableName = strTableName;
}
if(null != m_ds.Tables[m_tableName])
{
m_ds.Tables.Remove(m_tableName);
}
m_da.Fill(m_ds,m_tableName);
m_dt = m_ds.Tables[m_tableName];
m_dv = m_dt.DefaultView;
m_sql = strSql;
}
catch(OleDbException e)
{
MessageBox.Show(e.ToString());
return false;
}
return true;
}
/// <summary>
/// 取消修改,不保存入DB
/// </summary>
/// <returns></returns>
public bool RejectChange()
{
m_ds.RejectChanges();
return true;
}
/// <summary>
/// 刷新数据,virtual函数,有待子类override
/// </summary>
/// <returns>true:成功 false:失败</returns>
public bool RefreshData(OleDbConnection conn)
{
if(conn == null)
return LoadData(m_conn,m_sql,m_tableName);
else
return LoadData(conn,m_sql,m_tableName);
} /// <summary>
/// 保存入数据库
/// </summary>
/// <returns>true:成功/false失败</returns>
public bool SaveToDatabase()
{
int rowCount=0;
return UtilDB.SaveToDatabase(m_ds,m_da,m_tableName,ref rowCount);
} #endregion #region 其它
/// <summary>
/// 取得当前的位置信息描述,常用于显示状态
/// </summary>
/// <returns>记录位置的描述</returns>
public string GetPositionDesc(RecStatus recStatus)
{
switch(recStatus)
{
case RecStatus.Inserting:
return m_dv.Count.ToString() + "/" + m_dv.Count.ToString();
case RecStatus.NoData:
return "0/0";
default: //其它状态时
return (m_nIndex+1).ToString() + "/" + m_dv.Count.ToString();
}
}
public string GetPositionDesc()
{
return (m_nIndex+1).ToString() + "/" + m_dv.Count.ToString();
} /// <summary>
/// 判断状态是否合法,不合法返回合法的状态。
/// </summary>
/// <param name="recStatus">待检验状态</param>
/// <returns>合法状态</returns>
public RecStatus ValidateStatus(RecStatus recStatus)
{
if(m_dv.Count<=0 && recStatus == RecStatus.Browsing)
return RecStatus.NoData;
return recStatus;
} /// <summary>
/// 判断记录索引是否合法,不合法进行修改并返回
/// </summary>
/// <returns>合法的索引</returns>
public int ValidateIndex()
{
int nUpBound;
nUpBound = m_dv.Count - 1;
if(nUpBound < 0)
return -1;
if(m_nIndex < 0)
m_nIndex = 0;
if(m_nIndex > nUpBound)
m_nIndex = nUpBound;
return m_nIndex;
}
/// <summary>
/// 数据集
/// </summary>
public DataView DataView
{
get
{
return m_dv;
}
} /// <summary>
/// 当前的记录索引,0开始
/// </summary>
public int RowIndex
{
get
{
return m_nIndex;
}
set
{
m_nIndex = value;
ValidateIndex();
}
}
#endregion /// <summary>
/// 按给定参数排序
/// </summary>
public void Sort(SortParam sortParam)
{
if(m_dv == null)
return;
m_dv.Sort = m_dv.Table.Columns[sortParam.nIndex].ColumnName+ " " +
(sortParam.nUp1Down2None0 == 1 ? "" : "DESC");
} public void SetColumns(System.String strCaption)
{
string[] strCaptions;
strCaptions = strCaption.Split(new Char[]{'|'});
int nMax;
nMax = System.Math.Min(m_dt.Columns.Count,strCaptions.GetUpperBound(0));
for(int i = 0;i<=nMax;i++)
{
m_dt.Columns[i].Caption = strCaptions[i];
}
} public OleDbConnection GetConn()
{
return m_conn;
} }
}
在c#中查询记录的时候,可以返回当前的记录号吗?