摘要:本文主要向大家介绍了VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
本文主要向大家介绍了VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
测试表
1 SET ANSI_NULLS ON 2 GO 3 4 SET QUOTED_IDENTIFIER ON 5 GO 6 7 CREATE TABLE [dbo].[testtable]( 8 [id] [int] IDENTITY(1,1) NOT NULL, 9 [dt] [datetime] NULL,10 [val] [nvarchar](50) NULL,11 CONSTRAINT [PK_testtable] PRIMARY KEY CLUSTERED 12 (13 [id] ASC14 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]15 ) ON [PRIMARY]16 17 GO
写了个存储过程,其中有个参数:datetime的时间。
1 CREATE PROC testusp_AnEmptyDateTime2 @dt DATETIME,3 @val nvarchar(50)4 AS 5 INSERT INTO testtable6 ( dt,val )7 VALUES ( @dt,@val )8 GO
在命令行里,可以这样写,能运行:
结果:
于是很自然的想要在ADO中试下:
1 void CTestADOwithProcDlg::OnBnClickedButton2() 2 { 3 // TODO: 在此添加控件通知处理程序代码 4 CoInitialize(NULL); 5 6 _ConnectionPtr pConnection; 7 pConnection.CreateInstance(TEXT("ADODB.Connection")); 8 pConnection->ConnectionString=TEXT("File Name=sqlserver_ed.udl"); 9 pConnection->CommandTimeout=10;10 pConnection->CursorLocation=adUseClient;11 pConnection->Mode=adModeUnknown;12 pConnection->Open(TEXT(""),TEXT(""),TEXT(""),adConnectUnspecified);13 14 _CommandPtr pCmd;15 pCmd.CreateInstance(TEXT("ADODB.Command"));16 pCmd->ActiveConnection=pConnection;
17 pCmd->CommandText=_bstr_t(TEXT("testusp_AnEmptyDateTime"));18 pCmd->CommandType=adCmdStoredProc;19 20 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("dt")),adDBTimeStamp,adParamInput,50,_variant_t(TEXT("2015-01-01"))));21 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("val")),adVarWChar,adParamInput,50,_variant_t(TEXT("blablabla"))));22 23 pCmd->Execute(NULL,NULL,adCmdStoredProc);
24 25 CoUninitialize();26 }
成功。
将第20行换为:
1 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("dt")),adDBTimeStamp,adParamInput,50,_variant_t(TEXT(""))));
失败。
显然是参数错误。
尝试:
1 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("dt")),adDBTimeStamp,adParamInput,50));
失败。
又尝试了adEmpty和vtMissing也都是失败的。
=======================================================================
回头想想,在sqlcmd里,虽然说参数是指定了类型的,但实际上输入的都是字符串,只是datetime类型需要“XXXX-XX-XX XX:XX:XX”或者“XXXX/XX/XX XX:XX:XX”的格式。
那么来试下:
1 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("dt")),adVarWChar,adParamInput,50,_variant_t(TEXT("2015-01-01 11:22:33"))));
成功!
那么这样呢?
1 pCmd->Parameters->Append(pCmd->CreateParameter(_bstr_t(TEXT("dt")),adVarWChar,adParamInput,50,_variant_t(TEXT(""))));
成功!
但时间是默认的上世纪初啊。
=======================================================================
虽然搞懂了一点东西,只要格式正确,可以用字符类型,(效率什么的先不考虑),但会有默认的初始时间。
看来,不想传时间的时候,还是在存储过程里的去掉吧。
以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号