2008-11-10 7 views
5

Tôi đang cập nhật một danh sách dài các bản ghi. Trong mã của tôi, mọi thứ đều chạy như được dự đoán cho đến khi nó thực hiện truy vấn. Tôi nhận được mộtCú pháp không chính xác gần lỗi quy trình được lưu trữ

cú pháp sai gần

(tên thủ tục lưu trữ của tôi) 'TempUpdatePhysicalCityStateZip'. Tôi đã thử nghiệm nó với SQL Server Management Studio và nó chạy tốt. Vì vậy, tôi không hoàn toàn chắc chắn nơi tôi đã nhận nó sai. Dưới đây là thủ tục được lưu trữ và mã của tôi:

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 

Dưới đây là mã của tôi:

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

Trả lời

8

Tôi tin rằng bạn có thể nhận được thông báo lỗi khó hiểu nếu bạn không xác định loại lệnh:

cmdUpdate.CommandType = CommandType.StoredProcedure; 
1

Bạn không cần ký hiệu @ trước thông số?

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

FWIW, Đó là loại mã bẩn ở đó, có thể bạn sẽ gặp nhiều vấn đề khi cố gắng duy trì điều đó. Vì lý do hiệu suất, bạn có thể muốn phân tích CityStateZipList trước khi bạn mở kết nối, theo cách đó bạn không giữ nó mở lâu hơn bạn cần.

+0

Tôi nghĩ bạn đúng và các tên thông số đó cần phải được sửa. Tuy nhiên, tôi nghĩ rằng thông báo lỗi "sai cú pháp" không chính xác được gây ra bởi CommandType thiếu. – DOK