2008-11-10 12 views
5

Ich aktualisiere eine lange Liste von Datensätzen. In meinem Code läuft alles wie vorhergesagt, bis es die Abfrage ausführt. Ich erhalte eineFalsche Syntax Fehler in der Nähe der gespeicherten Prozedur

falsche Syntax nahe 'TempUpdatePhysicalCityStateZip'

(mein Name der gespeicherten Prozedur). Ich habe es mit SQL Server Management Studio getestet und es läuft gut. Also bin ich mir nicht sicher, wo ich das falsch gemacht habe. Unten ist meine gespeicherte Prozedur und Code:

ALTER PROCEDURE [dbo].[TempUpdateCityStateZip] 
    @StoreNo nvarchar (11), 
    @City nvarchar(50), 
    @State nvarchar(2), 
    @Zip nvarchar(5)  
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE StoreContact 
    SET City = @City, State = @State, Zip = @Zip 
    WHERE StoreNo = @StoreNo 
END 

Hier mein Code:

Dictionary<string, string> CityStateZipList = getCityStateZipList(dbPath); 

using (SqlConnection conn = new SqlConnection(dbPath)) 
{ 
    conn.Open(); 

    SqlCommand cmdUpdate = new SqlCommand("TempUpdateCityStateZip", conn); 

    foreach (KeyValuePair<string, string> frKeyValue in CityStateZipList) 
    { 
     cmdUpdate.Parameters.Clear(); 

     string[] strCityStateZip = frKeyValue.Value.Split(' '); 
     cmdUpdate.Parameters.AddWithValue("StoreNo", frKeyValue.Key.ToString()); 

     foreach (String i in strCityStateZip) 
     { 
      double zipCode; 

      if (i.Length == 2) 
      { 
       cmdUpdate.Parameters.AddWithValue("State", i); 
      } 
      else if (i.Length == 5 && double.TryParse(i, out zipCode)) 
      { 
       cmdUpdate.Parameters.AddWithValue("Zip", i); 
      } 
      else 
      { 
       cmdUpdate.Parameters.AddWithValue("City", i); 
      } 
     } 

     cmdUpdate.ExecuteNonQuery(); 
    } 
} 

Antwort

8

Ich glaube Sie, dass rätselhafte Fehlermeldung erhalten, wenn Sie den Befehlstyp nicht angeben:

cmdUpdate.CommandType = CommandType.StoredProcedure; 
1

Benötigen Sie nicht das @ Zeichen vor dem Parameter?

FWIW, Das ist eine Art schmutziges Stück Code, Sie werden wahrscheinlich viele Probleme haben, das zu erhalten. Aus Performance-Gründen sollten Sie die CityStateZipList vor dem Öffnen der Verbindung analysieren, damit Sie sie nicht länger offen halten, als Sie benötigen.

+0

Ich denke, dass Sie richtig sind, und diese Parameternamen müssen korrigiert werden. Ich denke jedoch, dass die unergründliche "falsche Syntax" Fehlermeldung durch den fehlenden CommandType verursacht wird. – DOK