параметры не обновляются в SQL-заявлении - PullRequest
1 голос
/ 12 января 2011

У меня есть этот код:

string query = "select count(*) 
                  from MODEL m 
                  join KOLEKCJA ko on m.SEZON = ko.sezon 
             left join PRODUCENCI p on p.PRODUCENT_ID = m.PRODUCENT_ID 
             left join KRAJ k on k.KOD = m.KRAJ_POCH 
                 where ko.SEZON like :ko.SEZON 
                   and m.DO_PRODUKCJI like :m.DO_PRODUKCJI 
                   and k.KOD like :KOD 
                   and p.PRODUCENT_ID like :PRODUCENT_ID 
                   and m.MODEL_ID like :MODEL_ID";

OdbcCommand comm = new OdbcCommand();
comm.Connection = con;
comm.CommandText = query;
comm.CommandType = CommandType.Text;
comm.Parameters.AddWithValue("ko.SEZON", sezon);
comm.Parameters.AddWithValue("m.DO_PRODUKCJI", do_produkcji);
comm.Parameters.AddWithValue("KOD", kraj);
comm.Parameters.AddWithValue("PRODUCENT_ID", fabryka);
comm.Parameters.AddWithValue("MODEL_ID", model);

result = (int)comm.ExecuteScalar();

и всегда есть ошибка, что параметры не изменены; / Что я не так?

Ответы [ 3 ]

4 голосов
/ 12 января 2011

Для работы AddWithValue необходимо использовать заполнители. Вот отрывок из примера MSDN :

private static void UpdateDemographics(Int32 customerID,
    string demoXml, string connectionString)
{
    // Update the demographics for a store, which is stored 
    // in an xml column. 
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;

        // Use AddWithValue to assign Demographics.
        // SQL Server will implicitly convert strings into XML.
        command.Parameters.AddWithValue("@demographics", demoXml);

        try
        {
            connection.Open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
2 голосов
/ 08 ноября 2011

Соединения ODBC не работают с именованными заполнителями, как другие типы соединений. ODBC использует позиционные параметры, отмеченные знаком вопроса (?). Замените ваши переменные связывания на вопросительные знаки и обязательно добавьте ваши параметры в правильном порядке. Имя параметра, которое вы передаете в AddWithValue (), может быть любым. Вот так:

string query = "select count(*) 
                  from MODEL m 
                  join KOLEKCJA ko on m.SEZON = ko.sezon 
             left join PRODUCENCI p on p.PRODUCENT_ID = m.PRODUCENT_ID 
             left join KRAJ k on k.KOD = m.KRAJ_POCH 
                 where ko.SEZON       like ? 
                   and m.DO_PRODUKCJI like ? 
                   and k.KOD          like ? 
                   and p.PRODUCENT_ID like ? 
                   and m.MODEL_ID     like ?";

OdbcCommand comm = new OdbcCommand();
comm.Connection = con;
comm.CommandText = query;
comm.CommandType = CommandType.Text;
comm.Parameters.AddWithValue("ko.SEZON", sezon);
comm.Parameters.AddWithValue("m.DO_PRODUKCJI", do_produkcji);
comm.Parameters.AddWithValue("KOD", kraj);
comm.Parameters.AddWithValue("PRODUCENT_ID", fabryka);
comm.Parameters.AddWithValue("MODEL_ID", model);

result = (int)comm.ExecuteScalar();
1 голос
/ 12 января 2011

Вы уверены, , что вы можете иметь параметр с именем "ko.SEZON", то есть с "."во имя?Попробуйте удалить это "."из обоих вхождений имени (запрос и «AddWithValue»).

...