Visual C++ 2010获取SQL SERVER 2008数据并显示
来源:互联网 发布:手机淘宝如何消除差评 编辑:程序博客网 时间:2024/05/16 07:43
上一篇文章介绍了Visual C++ 2010对SQL SERVER 2008进行连接,我们建立了一个MFC程序,其中把基类CView替换成了CListView,这篇文章小菜进行数据获取和访问。
1:首先我们对客户区进行修改,使其具有类似Excel的数据格网风格
我们对OnInitialUpdate()进行修改
void CADOView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl& m_list = GetListCtrl(); //得到内置的listctrl引用
LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE); //获取当前窗口风格
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置报表风格
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle); //设置窗口风格
DWORD dwStyle = m_list.GetExtendedStyle();
//选中某行使整行高亮(只适用于报表风格的listctrl)
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与报表风格的listctrl)
m_list.SetExtendedStyle(dwStyle); //设置扩展风格
m_list.SetBkColor(RGB(200, 200, 200)); //设置背景颜色
m_list.SetTextBkColor(RGB(200, 200, 200)); //设置文本背景颜色
m_list.SetTextColor(RGB(10, 10, 80)); //设置文本颜色
CRect rectWindow;
this->GetWindowRect(&rectWindow); // 获取客户区窗口大小
int width = (rectWindow.right - rectWindow.left)/10; // 设置列宽 ,在客户区只能显示10列
for(int i=0;i<10;i++)
{
m_list.InsertColumn(i,L"",LVCFMT_CENTER,width);
}
this->ConnectSQL(L"EX3",L"FREE",L"523715");
}
2.然后根据自己的功能,实现函数即可,如果需要对CListCtrl进行操作,只需要调用CListView的成员函数GetListCtrl()即可以获得内置CListCtrl对象的引用。
3.数据获取,下面代码演示了显示数据库学生表中,学号和姓名的全部数据
void CADOView::OnShowstu()
{
_variant_t vSname,vSID; //变量声明
CString str;
m_recordset.CreateInstance(__uuidof( Recordset )); //创建实例
//执行SQL语句,得到记录集, connection必须已和数据库连接
m_recordset->Open("SELECT * FROM 学生",m_connection.GetInterfacePtr(),
adOpenStatic,adLockOptimistic,adCmdText);
CListCtrl& list = this->GetListCtrl();//得到listview内置listctrl的引用
int nRow = list.InsertItem(0, L"学号");
list.SetItemText(nRow, 1, L"姓名");
while(!m_recordset->EndOfFile) // no_namespace rename("EOF","EndOfFile") 这是在导入DLL时指定的
{
nRow = list.InsertItem(list.GetItemCount(),str); // 获取当前所在行数
vSID = m_recordset->GetCollect("学号"); //取得username字段的值
str = (TCHAR*)(_bstr_t)vSID;
list.SetItemText(nRow, 0,str ); // 数据输出nRow行,0列
vSname = m_recordset->GetCollect("姓名"); //取得username字段的值
str = (TCHAR*)(_bstr_t)vSname;
list.SetItemText(nRow, 1,str );
m_recordset->MoveNext(); // 获得下一个数据
}
}
Open方法的原型是这样的:
HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection,
enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
①Source是数据查询字符串
②ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象)
③CursorType光标类型,它可以是以下值之一,请看这个枚举结构:
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特别指定
adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这
种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的
操作对你是可见的。
adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。
adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操
作对你的记录集来说是不可见的。
};
④LockType锁定类型,它可以是以下值之一,请看如下枚举结构:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只读记录集
adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制
adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数
据的更新、插入、删除等动作
adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式
下完成。
};
5.option可以取以下值
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一个表名
adCmdProc:表明CommandText是一个存储过程
adCmdUnknown:未知
- Visual C++ 2010获取SQL SERVER 2008数据并显示
- 获取并显示数据
- SQL Server 2008 分页获取数据列表
- ASP.Net(C#)完整获取SQL Server的DateTime数据
- flex获取并显示数据
- sql server分页显示数据
- Visual C#的SQL Server编程(转)
- Visual C#的SQL Server编程(转)
- Visual C#的SQL Server数据库连接编程
- 保存图片到SQL Server并显示
- C#中读取sql server的数据,并在datagridview中显示
- C#中读取sql server的数据,并在datagridview中显示
- 用Excel VBA连接SQL Server数据库并将表中的数据显示到Excel中
- QT连接SQL Server数据库,并查询显示其中的数据
- java之修改并选择显示SQL Server数据库中的数据
- flex中获取并显示数据
- JQuery 获取数据列表并显示
- OpenCV 获取摄像头图像数据并显示
- Java keytool 安全证书学习笔记
- oracle 10g 命令行安装
- 多重继承的常见误用
- IP网络性能的测量与分析
- 交通标志的检测和识别
- Visual C++ 2010获取SQL SERVER 2008数据并显示
- Visual_Studio_2010快捷键大全
- Sql排序,不能使用变量
- 分治法(合并排序)
- 全讲解PHP+MySQL的分页显示示例分析
- JVM垃圾回收与性能调优
- 网址集合
- 不达目的 誓不罢休
- 大白话解释模拟退火算法