Синтаксическая ошибка (отсутствует оператор) в выражении запроса «System.Byte[]»

Привет, я использовал хранимую процедуру в SQL Server для передачи параметров в запрос, но теперь я меняю свою базу данных на доступ ms, и это мой первый раз, когда я имею дело.

как я могу передать байт [] в запрос sql? потому что я получил эту ошибку Синтаксическая ошибка (отсутствует оператор) в выражении запроса «System.Byte []».

это мой код

    public static int EditWhois(object ID,object Image, object Ranswer, object Fanswer1, object Fanswer2, object Fanswer3)
    {
        int result = 0;
        String sql = "UPDATE Whois SET [Image]="+@Image+", Ranswer=" + Ranswer + ", Fanswer1=" + Fanswer1 + ",Fanswer2=" + Fanswer2 + ",Fanswer3=" + Fanswer3 + " WHERE ID=" + ID;
        System.Windows.Forms.MessageBox.Show(sql);
        cmd = new OleDbCommand(sql, con);

        //cmd.Parameters.AddWithValue("@ID", ID); 
        //cmd.Parameters.AddWithValue("@Image", Image);
        //cmd.Parameters.AddWithValue("@Ranswer", Ranswer);
        //cmd.Parameters.AddWithValue("@Fanswer1", Fanswer1);
        //cmd.Parameters.AddWithValue("@Fanswer2", Fanswer2);
        //cmd.Parameters.AddWithValue("@Fanswer3", Fanswer3);

        if (con.State != ConnectionState.Open)
        {
            con.Open();
            result = cmd.ExecuteNonQuery();
            con.Close();
        }
        return result;
    }

person T4mer    schedule 31.05.2011    source источник
comment
Почему вы комментируете параметризованные строки? Почему каждый аргумент в вашем методе является object? Какой из них byte[]?   -  person BoltClock    schedule 01.06.2011
comment
Используйте параметризованный заполнитель (похоже, что это было сделано изначально). Это очистит код и избавит от ошибки.   -  person    schedule 01.06.2011
comment
я комментирую параметризованные строки, потому что я напрямую передаю аргументы в запрос, мои аргументы являются объектами, чтобы избежать приведения, byte[] - это @Image   -  person T4mer    schedule 01.06.2011
comment
параметризованный запрос приводит к той же ошибке!   -  person T4mer    schedule 01.06.2011


Ответы (2)


Используйте замену параметра @. Также, как говорит @BoltClock, измените подпись метода.

public static int EditWhois(object ID,object Image, object Ranswer, 
    object Fanswer1, object Fanswer2, object Fanswer3)
{
    int result = 0;
    String sql = "UPDATE Whois SET [Image]=@Image, Ranswer=@Ranswer, " + 
      "Fanswer1=@Fanswer1, Fanswer2=@Fanswer2, Fanswer3=@Fanswer3 " +
      "WHERE ID=@ID";
    cmd = new OleDbCommand(sql, con);

    cmd.Parameters.AddWithValue("@ID", ID); 
    cmd.Parameters.AddWithValue("@Image", Image);
    cmd.Parameters.AddWithValue("@Ranswer", Ranswer);
    cmd.Parameters.AddWithValue("@Fanswer1", Fanswer1);
    cmd.Parameters.AddWithValue("@Fanswer2", Fanswer2);
    cmd.Parameters.AddWithValue("@Fanswer3", Fanswer3);

    if (con.State != ConnectionState.Open)
    {
        con.Open();
        result = cmd.ExecuteNonQuery();
        con.Close();
    }
    return result;
}
person Richard Schneider    schedule 31.05.2011

результат по-прежнему 0; Я знаю проблему, где она была. если соединение закрыто, запрос будет выполнен успешно, но если оно открыто, то не будет выполнено из-за этого условия.

if (con.State != ConnectionState.Open)
{
    con.Open();
    result = cmd.ExecuteNonQuery();
    con.Close();
}

Это должно быть

if (con.State != ConnectionState.Open)
{
    con.Open();
}
    result = cmd.ExecuteNonQuery();
    con.Close();

Спасибо всем .

person T4mer    schedule 02.06.2011