2008-11-10 47 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,那是怎样的一个肮脏的一段代码存在的,你可能有很多问题,努力维护。出于性能方面的原因,您可能需要在打开连接之前先解析出CityStateZipList,这样才不会让开放时间超过您的需要。

+0

我认为你是正确的,这些参数名称需要更正。但是,我认为不可思议的“不正确的语法”错误消息是由缺少的CommandType引起的。 – DOK 2008-11-10 16:56:58

相关问题