【问题标题】:Incorrect syntax near stored procedure error存储过程错误附近的语法不正确
【发布时间】:2010-09-21 15:47:29
【问题描述】:

我正在更新一长串记录。在我的代码中,一切都按预期运行,直到它执行查询。我得到一个

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

【问题讨论】:

    标签: sql-server stored-procedures ado.net .net-3.5


    【解决方案1】:

    如果你不指定命令类型,我相信你会得到那个令人费解的错误消息:

    cmdUpdate.CommandType = CommandType.StoredProcedure;
    

    【讨论】:

      【解决方案2】:

      参数前不需要@符号吗?

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

      FWIW,那是一段肮脏的代码,你可能会在试图维护它时遇到很多问题。出于性能原因,您可能希望在打开连接之前解析出 CityStateZipList,这样您就不会保持它打开的时间超过您的需要。

      【讨论】:

      • 我认为你是对的,那些参数名称需要更正。但是,我认为难以理解的“语法错误”错误消息是由缺少 CommandType 引起的。
      猜你喜欢
      • 2020-07-05
      • 2020-06-23
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多