VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值
小标 2018-11-15 来源 : 阅读 1092 评论 0

摘要:本文主要向大家介绍了VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之SQL Server 2008 R2——VC++ ADO 操作 存储过程 向datetime类型参数传入空值

测试表


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频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程