VC 调用Sqlserver2008存储过程
最近做一个项目搞死人了。测试系统连接别人的数据库SQLSERVER2008 系统。请高手帮个忙。
任务就是,连接数据库,调用别人带参数的存储过程。我这边获取存储过程的值。
联系 :qq:332071278
我在VS2010扩展dll添加masdo15.dll 编译老是出这个错误。
:\testdll\messysobj00_new\release\msado15.tlh(126): error C2059: 语法错误:“__uuidof”
1>e:\testdll\messysobj00_new\release\msado15.tlh(126): error C2059: 语法错误:“)”
1>e:\testdll\messysobj00_new\release\msado15.tlh(126): error C2143: 语法错误 : 缺少“)”(在“;”的前面)
1>e:\testdll\messysobj00_new\release\msado15.tlh(127): error C2059: 语法错误:“__uuidof”
1>e:\testdll\messysobj00_new\release\msado15.tlh(127): error C2059: 语法错误:“)”
程序逻辑是MES站别管控。
[Database]
Server= 172.16.168.6
database= NPIMES
user= NPIMES
PWD= 123456
timeout=300
以下是建议的存储过程及功能说明,请查阅。 目前存储过程内容为空。后续所有的控制都可以通过这些存储过程实现。
Create Procedure uspGetUnitInfo
@xmlSerialNumber text, --'<SerialNumber><S Descr="SerialNumber">990123-1123</S></SerialNumber>'
@xmlStation text, --SampleString: '<StationInfo Description="BoardTester" />'
@UserID varchar(100) = NULL,
@EnterTime datetime,
@ExitTime datetime
As
功能说明:
1. 测试时,扫描产品SN,这个存储过程将去MES数据库检查SN的状态,如果合法,返回0,不合法,返回错误代码和错误描述,并且停止测试。
合法时,系统可以按一下格式返回MES系统数据;以下如:Partnumber、LineID、MEID等各自值。
<UNITINFO><GROUP name="Field">
<UNITDATA><NAME type="char">PartNumber</NAME><VALUE>T101-Product</VALUE></UNITDATA>
<UNITDATA><NAME type="char">LineID</NAME><VALUE>P1</VALUE></UNITDATA>
<UNITDATA><NAME type="char">MEID</NAME><VALUE>MEID0001</VALUE></UNITDATA>
……..
</GROUP></UNITINFO>
Procedure uspSaveTestResult
@strXmlTestResult text,
@EnterTime datetime,
@ExitTime datetime
As
功能说明:
1. 产品SN,通过合法性检查后,开始测试,测试完后,可以按一下格式把测试结果上传到MES系统,结果提交成功,返回值0,否则,返回错误代码和错误描述,产品不能进入下一工序。
<?xml version="1.0"?>
<BATCH TIMESTAMP="2014-12-13 00:12:39"><FACTORY NAME="Matsunichi" LINE="S11A" TESTER="S11CBT027" USER=""/><PRODUCT NAME="HUAWEI H30" REVISION=""/><REFS/><PANEL TIMESTAMP="2013-12-13 00:12:39"><DUT ID="021LXL7N1C054131" TIMESTAMP="2013-12-13 00:12:39" STATUS="PASS">
<GROUP NAME="MP2-SmarX1168-SPRTR6500-CBT" TIMESTAMP="2013-12-13 00:12:39" STATUS="PASS">
<TEST NAME="210011:Power on test:1" STATUS="PASS"/><TEST NAME="210012:HandoffBandSet[BC0_US]:1" STATUS="PASS"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:1018:full_power_mode]:1" STATUS="PASS" VALUE="2001" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:1018:low_power_mode]:1" STATUS="PASS" VALUE="1913" UNIT="" LOLIM="1600" HILIM="3100"/>
......
</GROUP>
<GROUP NAME="MP2-SmarX1168-SPRTR6501-CBT" TIMESTAMP="2013-12-13 00:12:39" STATUS="PASS">
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:98:full_power_mode]:1" STATUS="PASS" VALUE="2177" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:98:low_power_mode]:1" STATUS="PASS" VALUE="2090" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:202:full_power_mode]:1" STATUS="PASS" VALUE="2287" UNIT="" LOLIM="1600" HILIM="3100"/>
......
</GROUP>
<GROUP NAME="MP2-SmarX1168-SPRTR6502-CBT" TIMESTAMP="2013-12-13 00:12:39" STATUS="PASS">
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:202:low_power_mode]:1" STATUS="PASS" VALUE="2204" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:306:full_power_mode]:1" STATUS="PASS" VALUE="2203" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:306:low_power_mode]:1" STATUS="PASS" VALUE="2133" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="210013:Rx Cal DVGA val[BC0_US:410:full_power_mode]:1" STATUS="PASS" VALUE="2135" UNIT="" LOLIM="1600" HILIM="3100"/>
<TEST NAME="310209:Open Loop PowerTest:1" STATUS="PASS"/><TEST NAME="310000:Call Release:1" STATUS="PASS"/>
.......
</GROUP>
</DUT></PANEL></BATCH>
下面为测试系统扩展DLL模板
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// 如果使用 lpReserved,请将此移除
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MesSysObj00.DLL 正在初始化!\n");
// 扩展 DLL 一次性初始化
if (!AfxInitExtensionModule(MesSysObj00DLL, hInstance))
return 0;
// 将此 DLL 插入到资源链中
// 注意: 如果此扩展 DLL 由
// MFC 规则 DLL(如 ActiveX 控件)隐式链接到
// 而不是由 MFC 应用程序链接到,则需要
// 将此行从 DllMain 中移除并将其放置在一个
// 从此扩展 DLL 导出的单独的函数中。使用此扩展 DLL 的
// 规则 DLL 然后应显式
// 调用该函数以初始化此扩展 DLL。否则,
// CDynLinkLibrary 对象不会附加到
// 规则 DLL 的资源链,并将导致严重的
// 问题。
new CDynLinkLibrary(MesSysObj00DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MesSysObj00.DLL 正在终止!\n");
// 在调用析构函数之前终止该库
AfxTermExtensionModule(MesSysObj00DLL);
}
return 1; // 确定
}
//动态链接库输出函数
//创建对象并返回对象指针
extern "C" __declspec(dllexport) PVOID CreateObject(PSTR sName,PSTR sParam){return new CMesSysObj00(sName,sParam);};
extern "C" __declspec(dllexport) VOID GetObjectInfo(PSTR sClass,PSTR sVersion,PSTR sParamList)
{
sprintf(sClass,"CMesSysObj00");
sprintf(sVersion,"00");
sprintf(sParamList,"None");
};
CMesSysObj00::CMesSysObj00(const CString sObjectName,const CString sParam):CVirtualObject(sObjectName,sParam)
{
m_sClass = "CMesSysObj00";
m_sVersion +="00";
m_lstFuncInfo.AddTail(new FUNCINFO("MesInterface_SetPara","Initialize parameter","STR(Location),STR(Resource),STR(Operation),STR(User),STR(Password)","",128,&CMesSysObj00::_MesInterface_SetPara));
m_lstFuncInfo.AddTail(new FUNCINFO("ConnectServer","Log Server"," STR(),STR()","",1024,&CMesSysObj00::_ConnectServer));
}
BOOL CMesSysObj00::_MesInterface_SetPara(const CString sInput /* = CString */, CString &sOutput)
{
CHECKPARAMINIT(5,256);
CHECKSTR(0,sSite,"",0,64);
CHECKSTR(1,sResource,"",0,64);
CHECKSTR(2,sOperation,"",0,64);
CHECKSTR(3,sUser,"",0,64);
m_bSetPara = TRUE;
sOutput.Format("11111");
return TRUE;
}