簡體   English   中英

“參數數量與存儲過程的值數量不匹配” System.Data.Common.DbCommand細微差別

[英]“The number of parameters does not match number of values for stored procedure” System.Data.Common.DbCommand nuance

這可能是SQL Server數據庫設置問題,但我不確定從哪里開始尋找。

我有一個存儲過程:

CREATE PROCEDURE aStoredProcedure
@dteSince DATETIME = null
AS
...

調用存儲過程的C#代碼為:

using (IDataReader dr = database.ExecuteReader("aStoredProcedure"))
{
...

C#代碼在生產環境中可以正常工作。 此處, dteSince將被設置為null,因為它不作為輸入參數提供。

問題是當我在UAT環境中運行此程序時,它返回標題中顯示的消息- 參數數量錯誤...

我可以通過將代碼更改為來解決此問題:

using (IDataReader dr = database.ExecuteReader (CommandType.StoredProcedure, "aStoredProcedure"))
{
...

該修補程序只是掩蓋了一個真正的問題,即代碼如何在一個環境中失敗而在另一個環境中運行良好。

我已經刪除並重新創建了存儲過程,但是沒有運氣。

技術使用的是C#2.0和Sql Server 2005。

恕我直言,無論如何都應始終指定CommandType-明確性總是比隱性更好。 顯然,在兩種情況下,發生的事情是不同的,但是當您明確了解命令類型時,代碼將按預期工作。

我唯一能想到的-數據庫設置是否完全相同-特別是在處理NULL時?

編輯

可能值得檢查SET ANSI_NULLS ON/OFFSET CONCAT_NULL_YIELDS_NULL ON / OFF-您可以查看兩個數據庫的屬性,並查看設置是否匹配。

以下是我通常嘗試的一些故障排除技巧。

  1. 檢查“數據庫”對象類型所在的DAL程序集的程序集版本
  2. 檢查對DAL的庫引用 -是否從GAC引用DLL-DLL引用包含舊程序集的GAC之前遇到了麻煩
  3. 當代碼嘗試在UAT環境中連接數據庫時,請檢查默認數據庫-根據您連接數據庫的方式,它可能指向其他數據庫。

而且一切仍然不好,清理並重新構建解決方案

旁注:h,我認為“ System.Data.IDataReader”不會包含在使用的技術中;)

您可以使用SQL事件探查器從SQL Server角度查看正在發生的情況。

理想情況下,還可以讓某人從生產中捕獲痕跡,以便可以對其進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM