【错误一】 SqlServer提示错误:OleDbException 必须声明标量变量 今天用.net使用Oledb的方式操作SqlServer,却总是莫名其妙的报“必须声明标量变量…”,在代码里面分别采用了下面的两种方式,都无济于事: 方法一: OleDbParameter [] p = new OleDbParamete
【错误一】 SqlServer提示错误:OleDbException 必须声明标量变量
今天用.net使用Oledb的方式操作SqlServer,却总是莫名其妙的报“必须声明标量变量…”,在代码里面分别采用了下面的两种方式,都无济于事:
<span>方法一:</span>
<span>OleDbParameter</span>[] <span>p </span>= <span>new </span><span>OleDbParameter</span>[] { <span>new </span><span>OleDbParameter</span>(<span>"@aa"</span>,1), <span>new </span><span>OleDbParameter</span>(<span>"@bb"</span>,<span>"shelley"</span>), <span>new </span><span>OleDbParameter</span>(<span>"@cc"</span>,<span>DateTime</span>.<span>Now</span>)};<span>Objcmd</span>.<span>Parameters</span>.<span>AddRange</span>(<span>p</span>);<span>方法二:</span>
<span>OleDbParameter </span><span>pp</span>;<span>pp </span>= <span>new </span><span>OleDbParameter</span>(<span>"@aa"</span>,<span>OleDbType</span>.<span>Integer</span>);<span>pp</span>.<span>Value </span>= 1;<span>Objcmd</span>.<span>Parameters</span>.<span>Add</span>(<span>pp</span>);<span>pp </span>= <span>new </span><span>OleDbParameter</span>(<span>"@bb"</span>, <span>OleDbType</span>.<span>LongVarChar</span>);<span>pp</span>.<span>Value </span>= <span>"shelley"</span>;<span>Objcmd</span>.<span>Parameters</span>.<span>Add</span>(<span>pp</span>);<span>pp </span>= <span>new </span><span>OleDbParameter</span>(<span>"@cc"</span>, <span>OleDbType</span>.<span>Date</span>);<span>pp</span>.<span>Value </span>= <span>DateTime</span>.<span>Now</span>;<span>Objcmd</span>.<span>Parameters</span>.<span>Add</span>(<span>pp</span>);
无论怎么样写,都会提示“必须声明标量变量@aa”,最终的原因是下面这句:
<span>OleDbCommand </span><span>Objcmd </span>= <span>new </span><span>OleDbCommand</span>(<span>"insert into test (a,b,c)values(@aa,@bb,@cc)"</span>, <span>Objconn</span>);
正确写法:
<span>OleDbCommand </span><span>Objcmd </span>= <span>new </span><span>OleDbCommand</span>(<span>"insert into test (a,b,c)values(?,?,?)"</span>, <span>Objconn</span>);
这样就正常通过了。
【错误二】Sybase提示错误:不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))
.net用Oledb操作Sybase,因为在一个sql语句中可能会多次用到同一个参数,代码如下:
<span>OleDbCommand </span><span>Objcmd </span>= <span>new </span><span>OleDbCommand</span>(<span>"update test set a=@aa where a=@aa"</span>, <span>Objconn</span>);<span>OleDbParameter</span>[] <span>p </span>= <span>new </span><span>OleDbParameter</span>[] { <span>new </span><span>OleDbParameter</span>(<span>"aa"</span>,1), <span>new </span><span>OleDbParameter</span>(<span>"aa"</span>,1)};<span>Objcmd</span>.<span>Parameters</span>.<span>AddRange</span>(<span>p</span>);<span>Objconn</span>.<span>Open</span>();<span>Objcmd</span>.<span>ExecuteNonQuery</span>();<span>Objconn</span>.<span>Close</span>();
上面的代码就会提示“不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))”错误。问题原因在于参数中存在两个相同名字,对于这种情况只需要写一个参数就可以了,改动如下:
<span>OleDbCommand </span><span>Objcmd </span>= <span>new </span><span>OleDbCommand</span>(<span>"update test set a=@aa where a=@aa"</span>, <span>Objconn</span>);<span>OleDbParameter</span>[] <span>p </span>= <span>new </span><span>OleDbParameter</span>[] { <span>new </span><span>OleDbParameter</span>(<span>"aa"</span>,1)};
或
<span>OleDbCommand </span><span>Objcmd </span>= <span>new </span><span>OleDbCommand</span>(<span>"update test set a=@aa where a=@aa2"</span>, <span>Objconn</span>);<span>OleDbParameter</span>[] <span>p </span>= <span>new </span><span>OleDbParameter</span>[] { <span>new </span><span>OleDbParameter</span>(<span>"aa"</span>,1), <span>new </span><span>OleDbParameter</span>(<span>"aa2"</span>,1)};
【总结】
如果写一个程序,需要支持SqlServer和Sybase的时候这个地方需要特别注意:
1.SqlServer需要用“?”作为参数占位符,这样要求即使用到了同一个参数,也必须多次添加Parameter;
2.Sybase如果多次使用同一个参数,不能多次添加Parameter,否则会报错;

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

PHP编程中有哪些常见的Behat操作?Behat是一个行为驱动开发(BDD)工具,允许测试人员和开发人员在自然语言中撰写测试用例,并将这些用例转化为可执行的代码。它支持PHP语言,并提供了丰富的库和功能,可以实现多种常见的测试操作。下面列举了PHP编程中常见的Behat操作。前置条件(Background)在编写测试用例时,有时候会有一些公共的前置条件需要

ThinkPHP6是一款基于PHP的MVC框架,极大地简化了Web应用程序的开发。其中表单验证是一个非常基础和重要的功能。在这篇文章中,我们将介绍ThinkPHP6中如何进行表单验证操作。一、验证规则定义在ThinkPHP6中,验证规则都需要定义在控制器中,我们可以通过在控制器中定义一个$validate属性来实现规则的定义,如下所示:usethinkVa

Go语言作为一个现代化的编程语言,时间在开发中占有很重要的位置。Go语言提供了一些内置的时间函数和结构体,使得时间的处理变得更加便捷。在本篇文章中,将会介绍一些Go语言中常用的时间处理方式。time.Now()我们可以使用time.Now()函数获取当前的时间:now:=time.Now()fmt.Println(now)输出:2019-06-131

在高并发请求处理方面,.NETASP.NETCoreWebAPI性能优于JavaSpringMVC,原因包括:AOT提前编译,减少启动时间;更精细的内存管理,由开发人员负责分配和释放对象内存。

OAuth(开放授权)是一种用于授权访问控制的标准化协议。在Web开发中,使用OAuth可以帮助应用程序安全地从第三方平台中获取用户数据或资源。而在PHP编程中,OAuth操作也被广泛应用。本文将介绍PHP编程中的常见OAuth操作。OAuth1.0a授权OAuth1.0a授权是OAuth中最早出现的授权方式,也是最复杂的一种授权方式。在PHP编程中,O

如果你是一名.NET开发者,你必须意识到在交付高质量软件方面,优化功能和性能的重要性。通过熟练使用提供的资源并减少网站加载时间,你不仅为用户创造了愉快的体验,还能减少基础设施成本。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境