永发信息网

用VC++如何操作SQL Server数据库

答案:1  悬赏:50  手机版
解决时间 2021-02-06 17:54
请大家帮帮忙,分别写出以下下代码:(最好使用VS2008+SQLServer2005)
需要包含的头文件。
1.链接数据库
2.建立数据库
3.定义表
4.添加数据
5.删除数据
6.排序
最好有详细的注释。

我是一个数据库的初学者,想写一个信息管理系统,用VC++实现数据库信息的添加、修改、删除,但看了看书,不太懂,希望大家帮帮忙。ODBC\ADO\ 或者其他方法都行,但最好写的详细一点,容易理解。
如果有什么好理解的书也可以告诉我。

不要从别的实例教材或者其他地方复制,那样的我自己也会找。
最佳答案
1---------------------------------------

#include
#include
#include
#include
#include
#include
#define SNO_LEN 30
#define NAME_LEN 50
#define DEPART_LEN 100
#define SSEX_LEN 5
int main()
{

//以king开头的表示的是连接KINGBASEES的变量
//以server开头的表示的是连接SQLSERVER的变量
SQLHENV kinghenv, serverhenv; //环境句柄
SQLHDBC kinghdbc,serverhdbc; //连接句柄
SQLHSTMT kinghstmt,serverhstmt; //语句句柄
SQLRETURN ret;
SQLCHAR sName[NAME_LEN], sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN];
SQLINTEGER sAge;
SQLINTEGER cbAge = 0, cbSno = SQL_NTS, cbSex = SQL_NTS,cbName = SQL_NTS,cbDepart = SQL_NTS;

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &kinghenv);
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &serverhenv);
ret = SQLSetEnvAttr(kinghenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret = SQLSetEnvAttr(serverhenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

ret = SQLAllocHandle(SQL_HANDLE_DBC, kinghenv, &kinghdbc);
ret = SQLAllocHandle(SQL_HANDLE_DBC, serverhenv, &serverhdbc);
ret = SQLConnect(kinghdbc,
"KingbaseES ODBC",SQL_NTS,
"SYSTEM",SQL_NTS,
"MANAGER",SQL_NTS);
if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值
return -1;
ret = SQLConnect(serverhdbc,
"SQLServer",SQL_NTS,
"sa",SQL_NTS,
"sa",SQL_NTS);
if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值
return -1;

ret = SQLAllocHandle(SQL_HANDLE_STMT, kinghdbc, &kinghstmt);
ret = SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER );

ret = SQLAllocHandle(SQL_HANDLE_STMT, serverhdbc, &serverhstmt);



ret = SQLPrepare(serverhstmt,"INSERT INTO STUDENT (SNO,SNAME,SSEX,SAGE,SDEPT) VALUES ( , , , , )", SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindParameter(serverhstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, SNO_LEN, 0, sSno, 0, &cbSno);
ret = SQLBindParameter(serverhstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, NAME_LEN, 0, sName, 0, &cbName);
ret = SQLBindParameter(serverhstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 2, 0, sSex, 0, &cbSex);
ret = SQLBindParameter(serverhstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &sAge, 0, &cbAge);
ret = SQLBindParameter(serverhstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, DEPART_LEN, 0, sDepart, 0, &cbDepart);
}


ret = SQLExecDirect(kinghstmt,"SELECt * FROM STUDENT",SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindCol(kinghstmt, 1, SQL_C_CHAR,sSno,SNO_LEN, &cbSno);
ret = SQLBindCol(kinghstmt, 2, SQL_C_CHAR, sName, NAME_LEN, &cbName);
ret = SQLBindCol(kinghstmt, 3, SQL_C_CHAR, sSex, SSEX_LEN, &cbSex);
ret = SQLBindCol(kinghstmt, 4, SQL_C_LONG, &sAge, 0, &cbAge);
ret = SQLBindCol(kinghstmt, 5, SQL_C_CHAR, sDepart, DEPART_LEN, &cbDepart);

2-------------------------------------------

1.提取单条记录
//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
//no_namespace,rename("EOF","adoEOF"),named_guids
CoInitialize(NULL);
_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
_ConnectionPtr m_pConnection(_uuidof(Connection));
m_pConnection->Open(varSource,"","",adModeUnknow);
_RecordsetPtr m_pSet(_uuid(Recordset));
try {
m_pSet->Open(%%1,m_pConnection.GetInterfacePtr()
adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error *e){
{
AfxMessageBox(e->ErrorMessage());
return;
}
_variant_t var;
CString %%2="";
long fldc=m_pSet->GetFields()->GetCount();
long i=0;
try {
m_pSet->MoveFirst();
if(!m_pSet->adoEOF)
{
for(i=0;i {
var=m_pSet->GetCollect((long)i);
var.ChangeType(VT_BSTR);
%%2+=var.bstrVal;
%%2+=" ";
}
//m_pSet->MoveNext();
}
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
delete e;
}
//m_pSet->MoveFirst();
CoUninitialize(NULL);

2.单值比较
//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
//no_namespace,rename("EOF","adoEOF"),named_guids
CoInitialize(NULL);
_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
_ConnectionPtr m_pConnection(_uuidof(Connection));
m_pConnection->Open(varSource,"","",adModeUnknow);
_RecordsetPtr m_pSet(_uuid(Recordset));
try {
m_pSet->Open(%%1,m_pConnection.GetInterfacePtr()
adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error *e){
{
AfxMessageBox(e->ErrorMessage());
return;
}
_variant_t var;
try {
m_pSet->MoveFirst();
if(!m_pSet->adoEOF)
{
var=m_pSet->GetCollect((long)0);
var.ChangeType(VT_I2);
int %%3=var.intVal;
if(%%3==%%4)
{
%%5
}
//m_pSet->MoveNext();
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
delete e;
}
//m_pSet->MoveFirst();
CoUninitialize(NULL);

3.显示表格
//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
//no_namespace,rename("EOF","adoEOF"),named_guids
CoInitialize(NULL);
_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb";
//_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
_ConnectionPtr m_pConnection(_uuidof(Connection));
m_pConnection->Open(varSource,"","",adModeUnknow);
//打开属性为默认(adModeRead(只读),adModeWrite(可写),adModeReadWrite(可读写)等)
_RecordsetPtr m_pSet(_uuid(Recordset));
try {
HRESULT hr=m_pSet->Open(%%1,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
}
if(SUCCESSED(hr))
{
//表打开成功
}
FieldsPtr p_fields=m_pSet->Fields;
FieldPtr p_field;
_variant_t var_index;
LPCSTR field_name;
int index=0;
_bstr_t bstr_field_name;
int countfields=p_fields->GetCount();
CString *Column=new CString[countfields];
CListCtrl *pList=(CListCtrl*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA
VERIFY(pList);
pList->DeleteAllItems();
for(index=0;index {
var_index.vt=VT_I4;
var_index.IVal=index;
p_field=p_fields->Item[var_index];
bstr_field_name=p_field->GetName();
field_name=(LPCSTR)bstr_field_name;
Column[index]=field_name;
int ColumnWidth=Column[index].GetLength()*15;
pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);
}
int i=0;
_bstr_t vCol;
//pList->SetTextBkColor(RGB(122,200,122));
//pList->SetTextColor(RGB(0,0,200));
while(!m_pSet->adoEOF)
{
pList->Insert(i,atoi(i));
for(int j=0;j {
vCol=m_pSet->GetCollect((long)j);
pList->SetItemText(i,j,vCol);
}
m_pSet->MoveNext();
i++;
}
CoUninitialize(NULL);

3----------------------------------------------
BOOL CRoominfo::OnInitDialog()
{
CDialog::OnInitDialog();
m_roomlist.InsertColumn(0,"房间号",LVCFMT_LEFT,60);
m_roomlist.InsertColumn(1,"房间类别",LVCFMT_LEFT,78);
m_roomlist.InsertColumn(2,"房间面积",LVCFMT_LEFT,78);
m_roomlist.InsertColumn(3,"床位数",LVCFMT_LEFT,60);
m_roomlist.InsertColumn(4,"空调",LVCFMT_LEFT,45);
m_roomlist.InsertColumn(5,"地毯",LVCFMT_LEFT,45);
m_roomlist.InsertColumn(6,"电话",LVCFMT_LEFT,45);
m_roomlist.InsertColumn(7,"电视",LVCFMT_LEFT,45);
m_roomlist.InsertColumn(8,"卫生间",LVCFMT_LEFT,60);
m_roomlist.InsertColumn(9,"价格",LVCFMT_LEFT,74);
RECT rect;
m_roomlist.GetWindowRect(&rect);
m_roomlist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RefreshData();
return TRUE;
}

void CRoominfo::RefreshData()
{
if(!db.IsOpen())
{
db.OpenEx(_T("DSN=Hotel;UID=YILING"),CDatabase::noOdbcDialog);
}
m_roomlist.DeleteAllItems();
CRominfoset m_roomset(&db);
m_roomset.Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT * FROM [RoomInfor]");
if(m_roomset.GetRecordCount()!=0)
m_roomset.MoveFirst();
int i=0;
while(!m_roomset.IsEOF())
{
int temp=0;
CString str;
m_roomlist.InsertItem(i,"");
str.Format("%s",m_roomset.m_RoomID);
m_roomlist.SetItemText(i,0,str);
str.Format("%s",m_roomset.m_RoomType);
m_roomlist.SetItemText(i,1,str);
str.Format("%f",m_roomset.m_Area);
m_roomlist.SetItemText(i,2,str);
str.Format("%d",m_roomset.m_Bednum);
m_roomlist.SetItemText(i,3,str);
str.Format("%s",m_roomset.m_Aircondition);
m_roomlist.SetItemText(i,4,str);
str.Format("%s",m_roomset.m_Carpet);
m_roomlist.SetItemText(i,5,str);
str.Format("%s",m_roomset.m_Telephone);
m_roomlist.SetItemText(i,6,str);
str.Format("%s",m_roomset.m_Television);
m_roomlist.SetItemText(i,7,str);
str.Format("%s",m_roomset.m_Toilet);
m_roomlist.SetItemText(i,8,str);
str.Format("%s",m_roomset.m_Price);
m_roomlist.SetItemText(i,9,str);
m_roomset.MoveNext();
i++;
}
m_roomset.Close();
db.Close();
}

BEGIN_MESSAGE_MAP(CRoominfo, CDialog)
//{{AFX_MSG_MAP(CRoominfo)
ON_BN_CLICKED(IDC_ADDROOM, OnAddroom)
ON_BN_CLICKED(IDC_DELROOM, OnDelroom)
ON_BN_CLICKED(IDCHANGE, OnChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRoominfo message handlers

void CRoominfo::OnAddroom()
{
// TODO: Add your control notification handler code here
CAddroom addroom;
if(addroom.DoModal()==IDOK)
{
CString sql;
CAddroomset m_user;
if(!db.IsOpen())
{
db.OpenEx(_T("DSN=Hotel;UID=YILING"),CDatabase::noOdbcDialog);
}
m_user.Open(AFX_DB_USE_DEFAULT_TYPE,"SELECt * FROM [RoomInfor]");
sql.Format("insert into [RoomInfor] values(\'%s\',\'%s\',%f,%d,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',%f)",addroom.m_roomid,addroom.m_roomtype,addroom.m_area,addroom.m_bednum,addroom.m_air,addroom.m_carpet,addroom.m_tel,addroom.m_tv,addroom.m_wc,addroom.m_price);
db.ExecuteSQL(sql);
db.Close();
RefreshData();
}
}

void CRoominfo::OnDelroom()
{
// TODO: Add your control notification handler code here
int i;
CString str;
CRominfoset m_user;
i=m_roomlist.GetSelectionMark();
str=m_roomlist.GetItemText(i,0);
m_user.Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT * FROM [RoomInfor] WHERe [RoomID]='"+str+"'");
m_user.Delete();
m_user.Close();
RefreshData();

}

void CRoominfo::OnChange()
{
// TODO: Add your control notification handler code here
int i;
CString str;
i=m_roomlist.GetSelectionMark();
str=m_roomlist.GetItemText(i,0);
CModroominfo dlg;
if(dlg.DoModal()==IDOK)
{
CString strsql;
db.OpenEx(_T("DSN=Hotel;UID=YILING"),CDatabase::noOdbcDialog);
strsql.Format("update [RoomInfor] set [RoomID]='%s',[RoomType]='%s',[Area]='%f',[Bednum]='%d',[Aircondition]='%s',[Carpet]='%s',[Telephone]='%s',[Television]='%s',[Toilet]='%s',[Price]='%f' where [RoomID]='%s'",dlg.m_id,dlg.m_type,dlg.m_area,dlg.m_bednum,dlg.m_air,dlg.m_carpet,dlg.m_tel,dlg.m_tv,dlg.m_wc,dlg.m_price,str);
db.ExecuteSQL(strsql);
db.Close();
}
RefreshData();

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
嘟迪童装我想知道这个在什么地方
旋风少女2为什么白敬亭不演了啊?
股市如何收费 新手股票开户前须知
的相反数是.
临沂一中好还是沂南一中好
家伙的读音是什么
丰盛地板在什么地方啊,我要过去处理事情
完美国际覆霜武器
租界与殖民地的区别RT
南山装饰材料店怎么去啊,有知道地址的么
金才工程海外项目怎么样?是什么单位?靠谱吗
才买了个小米note,没有买手环,想用里面的记
眼睛看不清楚了就一定要戴眼镜吗?
Apple ID 无法注册 itunes里所有的信息栏都是
如家酒店无锡新区旺庄路店这个地址在什么地方
推荐资讯
中国石油辽河油田勘探事业部地址在什么地方,
永泰商务宾馆地址有知道的么?有点事想过去
瓯海区社保局电话
自己家里挖的吃水井 下雨时间长啦井水会有味
连云港双达商务信息咨询有限公司地址在哪,我
南塘巷在哪里啊,我有事要去这个地方
中国移动(八郎营业所)地址好找么,我有些事要
山西省太原市迎泽区的铜锣湾有个高中学校叫什
母牧羊犬尿尿的地方流血怎么回事刚刚一岁以前
罗兰欧罗巴地板地址在什么地方,想过去办事
《左传》中:学贵于专,好学而不贰 来自哪章
缘份宾馆地址好找么,我有些事要过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?