2009-03-02 5 views
0

Dies könnte ein SQL Server-Setup-Problem sein, aber ich bin nicht sicher, wo ich anfangen soll."Die falsche Anzahl der Parameter stimmt nicht mit der Anzahl der Werte für gespeicherte Prozesse überein" System.Data.Common.DbCommand Nuance

Ich habe eine gespeicherte Prozedur:

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

das C# -Code die gespeicherte Prozedur aufzurufen ist: -

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

Die C# -Code funktioniert auf der Produktion Umwelt. Hier wird dteSince auf Null gesetzt, da es nicht als Eingabeparameter bereitgestellt wird.

Problem ist, wenn ich dies in der UAT-Umgebung ausführen, wird die Nachricht in dem Titel gezeigt gibt - falsche Anzahl an Parametern ...

ich dies, indem Sie den Code beheben: -

Das Update maskiert nur das eigentliche Problem, wie der Code in einer Umgebung fehlschlägt und auf einer anderen einwandfrei funktioniert.

Ich habe die gespeicherte Prozedur gelöscht und neu erstellt, ohne Glück.

Technologies verwendet C# 2.0 & SQL Server 2005.

Antwort

3

IMHO die Commandtype sollte sowieso immer angegeben werden - Explizit ist immer implicitness vorzuziehen. Es ist offensichtlich, dass etwas unter der Haube passiert, das in beiden Umgebungen unterschiedlich ist, aber wenn Sie den Befehlstyp explizit angeben, funktioniert der Code wie erwartet.

Das einzige, was ich mir vorstellen kann - sind die Datenbankeinstellungen genau die gleichen - besonders in der Behandlung von NULL?

EDIT

wert sein kann SET ANSI_NULLS ON/OFF und SET CONCAT_NULL_YIELDS_NULL EIN/AUS-Überprüfung - Sie können an den Eigenschaften beiden Datenbanken suchen und wenn die Einstellung Spiel sehen.

+0

Stimmen Sie mit Ihnen bezüglich der Explizitheit überein. Ich habe versucht, einen Codewechsel zu vermeiden, bis wir das eigentliche Problem gelöst haben. Es könnte mit dem optionalen Eingabe-Parameter (NULLS) zu tun haben. Ich werde sehen, was ich in diesem Bereich finden kann. Danke für Ihre Hilfe. – Ferdeen

+0

Überprüft die ANSI_NULLS und CONCAT_NULL_YIELDS_NULL und sie sind identisch. Ich dachte fast, das wäre das Problem. Sieht so aus, als ob die C# -Code-Änderung die einzige Route ist. Danke noch einmal. – Ferdeen

1

Hier sind einige Tipps zur Fehlerbehebung, die ich normalerweise versuche.

  1. Überprüfen Sie die Montage Version von DAL Montage, dass „Datenbank“ Objekttyp in residiert
  2. überprüfen Bibliothek Referenz auf Ihre DAL -. Egal, ob Sie die DLL aus dem GAC verweisen oder nicht - hatte ich Schwierigkeiten bevor mit DLL GAC Referenzierung, die
  3. alte Baugruppe enthalten
  4. Ihre Standard-Datenbank überprüfen, wenn Ihr Code versucht, auf die Datenbank in UAT-Umgebung zu verbinden - Es könnte zu anderen Datenbanken werden zeigen je nachdem, wie Sie ein Wieder mit der Datenbank verbunden.

Und alles ist immer noch nicht gut, sauber und Re build Lösung

Seite Kommentar: Beh, ich glaube nicht, "System.Data.IDataReader" ist in der Technologie aufgenommen werden verwendet;)

+0

Danke dafür. Ich nehme den Namensraum raus. Ich gehe Ihre Checkliste durch – Ferdeen

+0

Doing eine saubere und Wiederaufbau half mir dies zu sortieren. – mezoid

0

Sie können SQL Profiler verwenden, um zu sehen, was in der SQL Server-Perspektive passiert.

Im Idealfall jemanden zu bekommen, um eine Spur von der Produktion zu erfassen, so dass sie verglichen werden können.