1.SQL Server 2008 R2 安装教程
2. SQL Server 2008 R2登录时出现错误:provider命名管道提供程序,error40,无法连接SQL Server,错误2.
解决方法:链接
3. VS 连接SQL Server 2008 R2 测试
//
4. SQL Server 2008 建立表格
建立表的名称为 Emp
三列 Id Name Memo
5. VS 连接SQL Server 2008 R2 测试 (ADO类)
获取SQL Server 2008的字符串地址了,在这补上:在桌面新建txt文件,更改后缀为.udl的文件,文件名随便,然后双击打开会跳转到“数据链接属性”在上面填好你的服务器名、用户名称和密码,并选择你要连接的数据库
ADO类文件下载:链接
对话框头文件中:
ADOConn m_adoConn;//ADOConn对象
_RecordsetPtr m_recordset;
初始化 OnInitDialog()中,添加
m_adoConn.OnInitDBConnect();//ADOConn对象初始化
6. VS2010中 MFC SQL Server 2008 R2
(a)查询数据
添加 list control 控件,右键-> 类向导->成员变量->对控件添加变量
在初始化 OnInitDialog() 中,先对表头初始化
m_listData.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_FLATSB );//设置风格
m_listData.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 100);//创建列
m_listData.InsertColumn(1,_T("Name"),LVCFMT_LEFT,100);
m_listData.InsertColumn(2,_T("Memo"),LVCFMT_LEFT,100);
查询按钮代码
//设置表头信息
CHeaderCtrl *pHead = m_listData.GetHeaderCtrl();
if(pHead && pHead->GetSafeHwnd() )
{
TCHAR szBuf[129] = {0};
HDITEM hdItem ={0};
hdItem.mask = HDI_TEXT; //取字符掩码
hdItem.pszText = szBuf; //字符缓冲区
hdItem.cchTextMax = 128; //缓冲区大小
//pHead->GetItem(i, &hdItem); //读取信息
hdItem.pszText = _T("Name"); //设置新字符
pHead->SetItem(1, &hdItem); //设置题头
hdItem.pszText = _T("Memo");
pHead->SetItem(2, &hdItem);
}
int n =m_listData.GetHeaderCtrl()->GetItemCount();
// TODO: 在此添加控件通知处理程序代码
m_listData.DeleteAllItems();
m_adoConn.OnInitDBConnect();//ADOConn对象初始化
int k=0;
int count=0;
sqlstr.Format(_T("select * from Emp"));
//获取记录集
m_recordset=m_adoConn.GetRecordSet ((_bstr_t)sqlstr);
while(!m_recordset->adoEOF )//遍历记录集
{
count++; //,,,,,,,
//读取各字段值
int i = m_listData.GetItemCount(); //List control 控件确保是正序插入
m_1=m_recordset->GetCollect(_T("Id"));
m_2=m_recordset->GetCollect(_T("Name"));
m_3=m_recordset->GetCollect(_T("Memo"));
//转换为CString类型
CString str1=(LPCTSTR)(_bstr_t)m_1;
CString str2=(LPCTSTR)(_bstr_t)m_2;
CString str3=(LPCTSTR)(_bstr_t)m_3;
//添加到列表框相关字段
m_listData.InsertItem(i,str1);
m_listData.SetItemText(i,1,str2);
m_listData.SetItemText(i,2,str3);
m_recordset->MoveNext();
k++;
}
m_adoConn.m_pRecordset->Close();
if(count>0)
{
//CString str;
//str.Format (_T("找到'%d'条记录!"),count);
//MessageBox(str);//提示对话框
}
else
{
MessageBox(_T("没有找到相关记录!"));
}
(b)增加数据
CString sql;
sql.Format(_T("select* from Emp"));//Emp 数据表的名称
m_recordset=m_adoConn.GetRecordSet((_bstr_t)sql);
UpdateData(TRUE);
try{
m_recordset->AddNew();
m_recordset->PutCollect("Id",_bstr_t(m_Id));
m_recordset->PutCollect("Name",_bstr_t(m_Name));
m_recordset->PutCollect("Memo",_bstr_t(m_Memo));
m_recordset->Update();
m_adoConn.ExitConnect();//断开与数据库的连接
MessageBox(_T("插入成功!"));
}
catch(_com_error e)
{
CString str;
str.Format(_T("数据库插入失败的原因:%s"),e.ErrorMessage());
MessageBox(str);
}
(c)删除数据
//删除
CString sql;
sql.Format(_T("select* from Emp"));//Emp 数据表的名称
m_recordset=m_adoConn.GetRecordSet((_bstr_t)sql);
UpdateData(TRUE);
POSITION pos;
pos = m_listData.GetFirstSelectedItemPosition();
int Index = m_listData.GetNextSelectedItem(pos);
m_listData.DeleteItem(Index);
try{
m_recordset->Move((long)pos,vtMissing);
m_recordset->Delete(adAffectCurrent);
m_recordset->Update();
m_adoConn.ExitConnect();
}
catch(_com_error e)
{
CString str;
str.Format(_T("数据库删除失败的原因:%s"),e.ErrorMessage());
MessageBox(str);
}