2008-11-10 4 views
5

Я обновляю длинный список записей. В моем коде все работает так, как было предсказано, пока не выполнит запрос. Я получаюНеправильный синтаксис около ошибки хранимой процедуры

Неправильный синтаксис около

(мое имя хранимой процедуры) 'TempUpdatePhysicalCityStateZip'. Я тестировал его с помощью SQL Server Management Studio, и он работает нормально. Итак, я не совсем уверен, где я ошибся. Ниже моя хранимая процедура и код:

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 

Вот мой код:

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(); 
    } 
} 

ответ

8

Я считаю, что вы можете получить это сообщение об ошибке загадочное, если вы не указали тип команды:

cmdUpdate.CommandType = CommandType.StoredProcedure; 
1

Вам не нужен знак @ перед параметром?

cmdUpdate.Parameters.AddWithValue("@State", i); 

FWIW, Thats вид грязный кусок кода там, вы, вероятно, есть много вопросов, пытаясь сохранить это. По соображениям производительности вы можете проанализировать CityStateZipList, прежде чем открывать соединение, таким образом, вы не держите его открытым дольше, чем вам нужно.

+0

Я думаю, вы правы, и эти имена параметров должны быть исправлены. Однако, я думаю, что непонятное сообщение об ошибке «неправильный синтаксис» вызвано отсутствием CommandType. – DOK 2008-11-10 16:56:58

Смежные вопросы