c#
  • if-statement
  • 2014-02-05 3 views 2 likes 
    2

    Я очень смущен, почему мой сценарий всегда дают результат ошибки Я хочу сделать «если раздел» с несколькими условиямиесли заявления с 2 условиями

    как этот

    string kalimatsql2 = "SELECT ID FROM Questions WHERE (content = '" + var + "'" + " && Quiz_ID = '" + idQuiz + "')"; 
    

    Я уже попытался изменить место одинарной кавычки, изменить = на ==, ommited (), dll , но все же дать ошибку

    Ошибка синтаксиса (отсутствует оператор) в выражении запроса '(content =' test2 '& & Quiz_ID =' 6 ')'.


    Update

    string kalimatsql2 = "SELECT ID FROM Questions WHERE (content = '" + dataDel + "'" + " AND Quiz_ID = " + idQuiz + ")"; 
    int idQuestion = sqlReader(kalimatsql2); 
    

    и это код функции sqlReader

    private int sqlReader(string kalimatSql) 
        { 
         Global.dbCon.Open(); 
         List<int> idQuestions = new List<int>(); 
         Global.reader = Global.riyeder(kalimatSql); 
         if (Global.reader.HasRows) 
         { 
          while (Global.reader.Read()) 
          { 
           int idQuestion = Convert.ToInt32(Global.reader.GetValue(0)); 
    
           idQuestions.Add(idQuestion); 
          } 
         } 
         Global.dbCon.Close(); 
         foreach (int id in idQuestions) { 
          return id; 
         } 
         return (idQuestions.Count > 0) ? idQuestions[0] : -1; 
        } 
    

    я использовал Microsoft Access в качестве базы данных

    +5

    'var' - ключевое слово в C#. выберите другое слово. –

    +5

    Обязательная ссылка [bobby tables] (http://xkcd.com/327/) - используйте параметризованные запросы. –

    +3

    Чтобы быть точным, 'var' является [контекстным ключевым словом в C#] (http://msdn.microsoft.com/en-us/library/the35c6y.aspx), поэтому синтаксически нормально использовать' string var = "test2" '... Но в этом случае лучше использовать читаемые имена (возможно,« contextId »), чем ключевые слова, которые * могут * использоваться в качестве имени переменной (включая случаи' @ class'). –

    ответ

    11

    Вы, кажется, смешивания LINQ и S QL.

    Заменить && на AND.

    И вам также может понадобиться удалить одиночные апострофы со стороны idQuiz, если это фактически число, а не строка.

    Кроме того, мы не можем видеть остальную часть вашего кода, но вы захотите изучить параметры ваших запросов, а не объединять их в одну строку. Это безопаснее и легче читать и поддерживать.


    Это происходит «на лету», поэтому возможны синтаксические ошибки. Это точно не соответствует вашему примеру - я не уверен, какая у вас логика в классе Global.

    private int GetQuestionIds(string content, int quizId) 
    { 
        List<int> idQuestions = new List<int>(); 
    
        string query 
         = "SELECT ID FROM Questions WHERE (content = @content AND Quiz_ID = @quizId)"; 
    
        using (var connection = new SqlConnection(connectionString)) 
        { 
         var command = new SqlCommand(query, connection); 
         command.Parameters.AddWithValue("@content", content); 
         command.Parameters.AddWithValue("@quizId", quizId); 
    
         try 
         { 
          connection.Open(); 
    
          var reader = command.ExecuteReader(); 
    
          if (reader.HasRows) 
          { 
           while (reader.Read()) 
           { 
            int idQuestion = Convert.ToInt32(Global.reader.GetValue(0)); 
    
            idQuestions.Add(idQuestion); 
           } 
          } 
         } 
         catch (Exception ex) 
         { 
          Console.WriteLine(ex.Message); 
         } 
        } 
    
        return idQuestions.Any() ? idQuestions.First() : -1; 
    } 
    

    Дополнительную информацию можно получить по адресу MSDN.

    +0

    сейчас он работает ... ia несколько раз предлагаю использовать параметрирование запросов в моем другом вопросе, я пытаюсь изучить его из многих ссылок в Интернете, но это заставляет меня более запутанный ... может предоставить простой пример, как использовать запросы параметров в этом случае, потому что я думаю, что этот случай все еще не сложен – Neversaysblack

    +0

    Вам нужно будет показать немного больше кода. Какой провайдер вы используете для подключения к базе данных? –

    +0

    Я уже редактировал мой пост, это достаточно? – Neversaysblack

    Смежные вопросы