首頁 資料庫 mysql教程 .net用OLEDB方式操作SqlServer和Sybase

.net用OLEDB方式操作SqlServer和Sybase

Jun 07, 2016 pm 03:26 PM
.net sqlserver 操作 方式

【错误一】 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,否则会报错;

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

sqlserver怎麼匯入mdf文件 sqlserver怎麼匯入mdf文件 Apr 08, 2024 am 11:41 AM

匯入步驟如下:將 MDF 檔案複製到 SQL Server 的資料目錄(通常為 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,開啟資料庫並選擇「附加」。點選“新增”按鈕,選擇 MDF 檔案。確認資料庫名稱,點選確定按鈕即可。

sqlserver資料庫中已存在名為的物件怎麼解決 sqlserver資料庫中已存在名為的物件怎麼解決 Apr 05, 2024 pm 09:42 PM

對於 SQL Server 資料庫中已存在同名對象,需要採取下列步驟:確認物件類型(表格、檢視、預存程序)。如果物件為空,可使用 IF NOT EXISTS 跳過建立。如果物件有數據,使用不同名稱或修改結構。使用 DROP 刪除現有物件(謹慎操作,建議備份)。檢查架構更改,確保沒有引用刪除或重新命名的物件。

怎麼查看sqlserver連接埠號 怎麼查看sqlserver連接埠號 Apr 05, 2024 pm 09:57 PM

若要查看 SQL Server 連接埠號碼:開啟 SSMS,連線到伺服器。在物件資源管理器中找到伺服器名稱,右鍵單擊它,然後選擇“屬性”。在「連線」標籤中,查看「TCP 連接埠」欄位。

sqlserver誤刪資料庫怎麼恢復 sqlserver誤刪資料庫怎麼恢復 Apr 05, 2024 pm 10:39 PM

若誤刪 SQL Server 資料庫,可採取下列步驟還原:停止資料庫活動;備份日誌檔案;檢查資料庫日誌;復原選項:從備份還原;從交易日誌還原;使用 DBCC CHECKDB;使用第三方工具。請定期備份資料庫並啟用交易日誌以防止資料遺失。

sqlserver服務無法啟動怎麼辦 sqlserver服務無法啟動怎麼辦 Apr 05, 2024 pm 10:00 PM

當 SQL Server 服務無法啟動時,可採取下列步驟解決:檢查錯誤日誌以確定根本原因。確保服務帳戶具有啟動服務的權限。檢查依賴項服務是否正在執行。禁用防毒軟體。修復 SQL Server 安裝。如果修復不起作用,重新安裝 SQL Server。

sqlserver資料庫在哪裡 sqlserver資料庫在哪裡 Apr 05, 2024 pm 08:21 PM

SQL Server 資料庫檔案通常儲存在下列預設位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可透過修改資料庫檔案路徑設定來自訂資料庫檔案位置。

sqlserver安裝失敗怎麼樣刪除乾淨 sqlserver安裝失敗怎麼樣刪除乾淨 Apr 05, 2024 pm 11:27 PM

如果 SQL Server 安裝失敗,可透過下列步驟清理:解除安裝 SQL Server刪除註冊表項刪除檔案和資料夾重新啟動計算機

sqlserver刪除不乾淨無法重新安裝怎麼辦 sqlserver刪除不乾淨無法重新安裝怎麼辦 Apr 05, 2024 pm 11:30 PM

SQL Server 刪除不乾淨導致無法重新安裝的問題可以透過以下步驟解決:手動刪除檔案和登錄項目;使用SQL Server 安裝卸載工具;使用第三方卸載工具;檢查Windows 事件檢視器;重新啟動電腦;重新安裝SQL Server。

See all articles