Неверный синтаксис рядом с ошибкой хранимой процедуры - PullRequest
5 голосов
/ 10 ноября 2008

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

Неверный синтаксис рядом с '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();
    }
}

Ответы [ 2 ]

8 голосов
/ 10 ноября 2008

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

cmdUpdate.CommandType = CommandType.StoredProcedure;
1 голос
/ 10 ноября 2008

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

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

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

...