用VC++2005调用用ASP.NET(C#)做的WebSerice接口进行操作数据库
2008-10-25 20:14
561 查看
用VC++2005调用用ASP.NET(C#)做的WebSerice接口进行操作数据库
作者:木水于(shemney_yang@qq.com)
关键字:VS2005
VC++2005ASP.NET(C#)
WebSerice数据库
ADOXML
(代码下载:http://download.csdn.net/source/719983
资源名称为VC++2005WebService)
一、
前言
最近在做毕业设计时,要对远程数据库进行查询,更新,删除等操作。
因此我利用WebService技术。
WebService技术主要目的是为了夸平台相互通信,不受语言的限制。为了达到这一目标,WebService采用了基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准。
既然如此,我一开始以为只要WebService提供操作数据库的接口,然后在客户端远程调用这些接口就可以达到我的目的。这想法是对的,说起来简单,但是做起来可不是这么简单了。尤其是我们有用VC
MFC的开发人员。
我花了几乎一周的时间来研究这个问题,在网上找的例子很简单,也很零散。但不符合我的要求,只说了调用WebService的一个很简单的接口,没有数据库操作。还有说用gsoap(WebService应用的一种),我觉得这个方法比较麻烦。
好了费话少说,下面介绍我的做法,这也是对网上所说的一些技术总结,因为在网上我没有找到一个具体例子,所以写这篇文章,为那些没有用过这种技术的人能够快速掌握这种技术,尽一点微薄之力。
二、
开发环境
开发平台:VS2005
操作系统:Windows2003(提供了方便的IIS管理,如果是使用XP的用户就请安装IIS吧)
开发语言:C++,C#
三、
主要解决思路
1、利用VS2005创建一个asp.net(C#)的web
服务网站,定义操作数据库的函数(也说是WebService接口)。
2、将创建的网站放到IIS虚拟目录中。
3、利用VC++2005创建一个基于对话框的程序,调用WebSerive接口。
四、
创建WebService网站(ASP.NET
C#)
1、
打开VS2005,新建一个网站。请看下图:
图一
如上图,选择模板“ASP.NETWEB服务”,语言“Visual
C#”,单击“浏览”更改项目的存放位置,更改项目名称“WS”,单击“确定”。
2、在解决方案中展开“App_Code”,找到“Service.cs”,双击打开,如下图所示:
图二
3、为了与VC++
客户端更好的通信,在这里决定使用ADO(注意不是ADO.NET)操作数据库,所以要添加COM组件。
方法如下:在解决方法中,右击鼠标右键,单击“添加引用”,单击“COM”,找到“Microsoft
ActiveXDataObjectsLibarary2.7”,选择它,单击确定。如下图所示:
图三
4、编写代码:
(1)、添加引用空间:
UsingADODB;
(2)、添加public属性:
public
staticADODB.Connectionconn=
newADODB.Connection();
public
staticADODB.Recordsetrs=
newADODB.Recordset();
public
stringstrConn="Provider=SQLOLEDB;DataSource=你的服务端IP;Persist
SecurityInfo=False;IntegratedSecurity=SSPI;User_ID=用户名;Password=用户密码;Initial
Catalog=数据库名";
(3)、设计接口:
[WebMethod]
public
stringExecSQL(stringstrSQL)
{
conn.ConnectionString=strConn;
//连接数据库
try
{
conn.Open(strConn,"",
"",-1);
}
catch(Exceptione)
{
conn.Close();
return(e.ToString());
}
ADODB.Streamstream=newADODB.Stream();
try
{
rs.Open(strSQL,conn,ADODB.CursorTypeEnum.adOpenKeyset,ADODB.LockTypeEnum.adLockOptimistic,(int)ADODB.CommandTypeEnum.adCmdText);
rs.Save(stream,PersistFormatEnum.adPersistXML);//将查询结果以XML形式保存到Stream对象中
}
catch(Exceptione1)
{
conn.Close();
returne1.ToString();
}
conn.Close();
returnstream.ReadText(stream.Size);//返回XML字符串
}
(5)、单击“生成网站”,如下图:
图四
然后,单击“调试”,再单击“开始执行(不调试)”,我们IE浏览器上右看如下图所示:
图五
(6)、在浏览器中成功看到WebService网页后,将WS添加到IIS的虚拟目录中。接着为WS创建应用程序池。
方法如下:打开“WS属性”,单击“创建”,单击确定。如下图所示:
图六
(7)、在IIS中,单击“Service.asmx”,单击鼠标右键,单击“浏览”。在浏览器中成功看网页后,得到见网址:http://localhost/WS/Service.asmx。(localhost这是在本地机器测试时用的,如果不是本地机器,将IP替换它)。
5、好了服务器的编程就到这,下面介绍VC++2005编写客户端,对于熟悉VC++的人来说,我就不把步骤写得那么详细了。
五、创建客户端(VC++2005MFC
非托管)
1、创建一个基于对话框的MFC应用程序,工程名为WebService。为对话框资源添加一个名为“查询”的按钮,并添加鼠标单击事件处理。
2、在解决方案资源管理器中右击鼠标,单击“添加Web引用”,如下图所示:
图七
如上图,在“URL(u)”中写上WebService的网址:http://localhost/WS/Service.asmx,单击“前往”,Web引用名可以随便取,我取“MyWebService”,单击“添加引用”。可以看到解决方案管理器中的变化:
图八
技巧说明:如果Web服务器上的WebService有改变时,可以在右击“MyWebService”,单击“更新Web引用”,重新编译。或者删除重新添加WEB引用。
3、在类视图中:
图九
如上图,有一类CserviceT<Tclient>,函数ExexSQL(BSTRstrSQL,BSTR
*ExecSQLResult)这是我们需要用到的。注意:这里我们可以看得出来,VC++是通过COM组件的方式调用WebService的接口的。
4、在stdafx.h中添加下面语句:
#import“C:/ProgramFiles/CommonFiles/System/ado/msado15.dll”no_namespacerename(“EOF”,”rsEOF”)
在WebServiceDlg.cpp中添加引用文件如下:
voidCWebServiceDlg::OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
CoInitialize(NULL);
_StreamPtrpStream;
pStream.CreateInstance(__uuidof(Stream));
_RecordsetPtrpRst(_uuidof(Recordset));
HRESULThr=S_OK;
CComBSTRResult;
CComBSTRsql=
"SelectNicknamefromUser1whereUser_ID='000'";
CService*service=
newCService();
//代理对象
//
可以调用SetUrl动态设置Web服务地址
//debug->SetUrl("http://blog.eray.cn/debug.asmx");
hr=service->ExecSQL(sql,&Result);
if(FAILED(hr))
{
MessageBox(L"调用失败");
}
else
{
CStringstr;
_variant_tvarOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
pStream->raw_Open(varOptional,adModeUnknown,adOpenStreamUnspecified,NULL,NULL);
pStream->put_Type(adTypeText);
pStream->WriteText((_bstr_t)Result,adWriteChar);
//将返回的XML字符串,读入Stream对象中
pStream->Position=0;
//打开含有XML序列化信息的Stream,vtMissing是不用我们自己定义的
pRst->Open(pStream.GetInterfacePtr(),vtMissing,
adOpenForwardOnly,adLockReadOnly,adCmdFile);
while(!pRst->rsEOF)
{
str=pRst->GetCollect("Nickname");
pRst->MoveNext();
}
MessageBox(str,L"查询结果");
pRst->Close();
pRst.Release();
pStream->Close();
pStream.Release();
}
deleteservice;
CoUninitialize();
}
这是我经过好几天努的成果,在这里班门弄斧了,如果有什么不对的地方,请指正。希望能给读者门一点帮助。
作者:木水于(
关键字:VS2005
VC++2005ASP.NET(C#)
WebSerice数据库
ADOXML
(代码下载:
资源名称为VC++2005WebService)
一、
前言
最近在做毕业设计时,要对远程数据库进行查询,更新,删除等操作。
因此我利用WebService技术。
WebService技术主要目的是为了夸平台相互通信,不受语言的限制。为了达到这一目标,WebService采用了基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准。
既然如此,我一开始以为只要WebService提供操作数据库的接口,然后在客户端远程调用这些接口就可以达到我的目的。这想法是对的,说起来简单,但是做起来可不是这么简单了。尤其是我们有用VC
MFC的开发人员。
我花了几乎一周的时间来研究这个问题,在网上找的例子很简单,也很零散。但不符合我的要求,只说了调用WebService的一个很简单的接口,没有数据库操作。还有说用gsoap(WebService应用的一种),我觉得这个方法比较麻烦。
好了费话少说,下面介绍我的做法,这也是对网上所说的一些技术总结,因为在网上我没有找到一个具体例子,所以写这篇文章,为那些没有用过这种技术的人能够快速掌握这种技术,尽一点微薄之力。
二、
开发环境
开发平台:VS2005
操作系统:Windows2003(提供了方便的IIS管理,如果是使用XP的用户就请安装IIS吧)
开发语言:C++,C#
三、
主要解决思路
1、利用VS2005创建一个asp.net(C#)的web
服务网站,定义操作数据库的函数(也说是WebService接口)。
2、将创建的网站放到IIS虚拟目录中。
3、利用VC++2005创建一个基于对话框的程序,调用WebSerive接口。
四、
创建WebService网站(ASP.NET
C#)
1、
打开VS2005,新建一个网站。请看下图:
图一
如上图,选择模板“ASP.NETWEB服务”,语言“Visual
C#”,单击“浏览”更改项目的存放位置,更改项目名称“WS”,单击“确定”。
2、在解决方案中展开“App_Code”,找到“Service.cs”,双击打开,如下图所示:
图二
3、为了与VC++
客户端更好的通信,在这里决定使用ADO(注意不是ADO.NET)操作数据库,所以要添加COM组件。
方法如下:在解决方法中,右击鼠标右键,单击“添加引用”,单击“COM”,找到“Microsoft
ActiveXDataObjectsLibarary2.7”,选择它,单击确定。如下图所示:
图三
4、编写代码:
(1)、添加引用空间:
UsingADODB;
(2)、添加public属性:
public
staticADODB.Connectionconn=
newADODB.Connection();
public
staticADODB.Recordsetrs=
newADODB.Recordset();
public
stringstrConn="Provider=SQLOLEDB;DataSource=你的服务端IP;Persist
SecurityInfo=False;IntegratedSecurity=SSPI;User_ID=用户名;Password=用户密码;Initial
Catalog=数据库名";
(3)、设计接口:
[WebMethod]
public
stringExecSQL(stringstrSQL)
{
conn.ConnectionString=strConn;
//连接数据库
try
{
conn.Open(strConn,"",
"",-1);
}
catch(Exceptione)
{
conn.Close();
return(e.ToString());
}
ADODB.Streamstream=newADODB.Stream();
try
{
rs.Open(strSQL,conn,ADODB.CursorTypeEnum.adOpenKeyset,ADODB.LockTypeEnum.adLockOptimistic,(int)ADODB.CommandTypeEnum.adCmdText);
rs.Save(stream,PersistFormatEnum.adPersistXML);//将查询结果以XML形式保存到Stream对象中
}
catch(Exceptione1)
{
conn.Close();
returne1.ToString();
}
conn.Close();
returnstream.ReadText(stream.Size);//返回XML字符串
}
(5)、单击“生成网站”,如下图:
图四
然后,单击“调试”,再单击“开始执行(不调试)”,我们IE浏览器上右看如下图所示:
图五
(6)、在浏览器中成功看到WebService网页后,将WS添加到IIS的虚拟目录中。接着为WS创建应用程序池。
方法如下:打开“WS属性”,单击“创建”,单击确定。如下图所示:
图六
(7)、在IIS中,单击“Service.asmx”,单击鼠标右键,单击“浏览”。在浏览器中成功看网页后,得到见网址:
5、好了服务器的编程就到这,下面介绍VC++2005编写客户端,对于熟悉VC++的人来说,我就不把步骤写得那么详细了。
五、创建客户端(VC++2005MFC
非托管)
1、创建一个基于对话框的MFC应用程序,工程名为WebService。为对话框资源添加一个名为“查询”的按钮,并添加鼠标单击事件处理。
2、在解决方案资源管理器中右击鼠标,单击“添加Web引用”,如下图所示:
图七
如上图,在“URL(u)”中写上WebService的网址:
图八
技巧说明:如果Web服务器上的WebService有改变时,可以在右击“MyWebService”,单击“更新Web引用”,重新编译。或者删除重新添加WEB引用。
3、在类视图中:
图九
如上图,有一类CserviceT<Tclient>,函数ExexSQL(BSTRstrSQL,BSTR
*ExecSQLResult)这是我们需要用到的。注意:这里我们可以看得出来,VC++是通过COM组件的方式调用WebService的接口的。
4、在stdafx.h中添加下面语句:
#import“C:/ProgramFiles/CommonFiles/System/ado/msado15.dll”no_namespacerename(“EOF”,”rsEOF”)
在WebServiceDlg.cpp中添加引用文件如下:
#include"WebService.h"
usingnamespaceService;
5、编写调用代码,如下:
voidCWebServiceDlg::OnBnClickedButton1()
{
//TODO:
在此添加控件通知处理程序代码
CoInitialize(NULL);
_StreamPtrpStream;
pStream.CreateInstance(__uuidof(Stream));
_RecordsetPtrpRst(_uuidof(Recordset));
HRESULThr=S_OK;
CComBSTRResult;
CComBSTRsql=
"SelectNicknamefromUser1whereUser_ID='000'";
CService*service=
newCService();
//代理对象
//
可以调用SetUrl动态设置Web服务地址
//debug->SetUrl("http://blog.eray.cn/debug.asmx");
hr=service->ExecSQL(sql,&Result);
if(FAILED(hr))
{
MessageBox(L"调用失败");
}
else
{
CStringstr;
_variant_tvarOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
pStream->raw_Open(varOptional,adModeUnknown,adOpenStreamUnspecified,NULL,NULL);
pStream->put_Type(adTypeText);
pStream->WriteText((_bstr_t)Result,adWriteChar);
//将返回的XML字符串,读入Stream对象中
pStream->Position=0;
//打开含有XML序列化信息的Stream,vtMissing是不用我们自己定义的
pRst->Open(pStream.GetInterfacePtr(),vtMissing,
adOpenForwardOnly,adLockReadOnly,adCmdFile);
while(!pRst->rsEOF)
{
str=pRst->GetCollect("Nickname");
pRst->MoveNext();
}
MessageBox(str,L"查询结果");
pRst->Close();
pRst.Release();
pStream->Close();
pStream.Release();
}
deleteservice;
CoUninitialize();
}
6、好了,该写的代码都已经写完了,编译成功,运行测试,OK成功!
六、结束语
这是我经过好几天努的成果,在这里班门弄斧了,如果有什么不对的地方,请指正。希望能给读者门一点帮助。
相关文章推荐
- asp.net学习总结——ADO.net(对Sql Server进行操作的数据访问类)
- asp.net(C#)调用C++程序并交互操作
- asp.net(C#)调用C++程序并交互操作【转】http://www.cnblogs.com/greatverve/archive/2010/06/07/Csharp-transfer-Cpp.html
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- ASP.NET MVC 环境下CKeditor 的配置以及用jQuery进行数据存取操作
- Asp.net/c#+OleDb操作excel文件(二),数据传输使用Parameters
- 转载文件操作美文 asp.net(C#)对文件进行操作
- ASP.NET对Excel单元格进行操作并且插入数据
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Winform项目调用asp.net数据接口
- 在ASP.NET 2.0中操作数据::基于用户对修改数据进行限制
- C#调用Geos的C函数接口进行空间拓扑操作
- C#(asp.net)IP地址查询接口,数据提供网易有道
- 在ASP.NET 2.0中操作数据之六十一:在事务里对数据库修改进行封装
- [NET][C#]操作Excel,套用模板并对数据进行分页
- ASP.NET MVC 环境下CKeditor 的配置以及用jQuery进行数据存取操作
- ASP.NET 调用 新浪微博开放平台API 接口的操作
- ASP.Net中通过Jquery前端对Repeater控件绑定的数据进行操作
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- Silverlight 2 (beta1)数据操作(1)——使用ASP.NET Web Service进行数据CRUD操作(上)