2016-11-28 2 views
0
var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 

Я не могу понять, почему часть LIKE в этой строке не работает! Я нашел в w3schools, что вы можете сделать LIKE '[a-z]%', если вы хотите, чтобы все значения в этом столбце. Но это не сработает. У меня нет ошибок, но я тоже не получаю никаких результатов!SQL comb LIKE & AND & =

У меня есть эта вторая строка, когда я не хочу все, но конкретный (exerVariName), этот работает. (Я выбираю либо конкретный один или 'All' с помощью выпадающего меню.)

var getDataS = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName = '" + exerVariName + "' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 

UPDATE!

Я хочу записать некоторые данные из базы данных только для просмотра, поэтому я выбираю «упражнение» с помощью радиообъектов, «exerVariName» с выпадающим меню и «fromDate/toDate» с текстовым полем!

<div> 
    <select name="exerVariName"> 
     <option value="all">All</option> 
     @foreach (var get in db.Query(getVariName)) { 
      <option value="@get.exerVariName">@get.exerVariName</option> 
     } 
    </select> 
</div> 

Так я получаю выберите вариант данных из базы данных, кроме первого, который я поставил там с «все» в качестве значения.

Тогда у меня есть этот код: (thisData ставится в Еогеасп)

var thisData = ""; 

if (exerVariName == "all") { 
    thisData = getData; 
} else { 
    thisData = getDataS; 
} 

так, что если выбрать-опции-выпадающий значение является «все» один, thisData = GetData что это один с LIKE, точка этой строки состоит в том, чтобы выбрать все в столбце из базы данных, поэтому я выбираю все буквы (az).

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 

И если я выбираю что-то конкретное в раскрывающемся списке он будет идти к ELSE части, если заявление и использовать эту линию

var getDataS = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName = '" + exerVariName + "' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 

Если вам нужна дополнительная информация, пожалуйста, скажите мне!

+0

Можете уточнить, что именно вы хотите здесь сделать? Вы хотите совместить литеральную строку '[A-Z]' или хотите, чтобы строки начинались с буквы? –

+0

Боковое примечание: ваше заявление уязвимо для SQL-инъекций. – Igor

+0

Это поможет, если вы разместите некоторые данные примера и что вы пытаетесь получить/вернуть из этого набора результатов на основе запроса, который вы пытаетесь сформулировать. Оставьте все, что не связано с диапазонами дат, если эти диапазоны дат не являются частью того, с чем вы столкнулись. – Igor

ответ

2

точки этой линии, чтобы выбрать все, что в колонке с база данных, поэтому я выбираю все буквы (az).

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '[A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";

Я думаю, что вы overthinking это. Если вы хотите все (т. Е. Фильтр в столбце), то полностью опустите эту часть/фильтр в предложение.

"SELECT * FROM Test WHERE exercise = " + exercise + " AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 

И, наконец, это уязвимо для SQL-инъекций, вы должны использовать параметризованные операторы вместо конкатенации строк. Если вы обновите свой вопрос на языке, я мог бы получить пример параметризованного запроса на этом языке.

+1

Holy f * ck, это просто взорвало мой разум, как я никогда не думал об этом ?? черт! Спасибо! Кроме того, я не тороплюсь, чтобы узнать некоторую безопасность, эта страница, однако, предназначена только для личного использования! будет только на моем локальном сервере для себя! –

+0

@PontusSvedberg - хорошая сделка. Мы все это понимаем как программисты (или кто-то еще), когда вы слишком долго смотрите на проблему :) – Igor

+0

Ха-ха наверняка человек! :) –

0

попробовать это

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName NOT LIKE '%[^A-Z]%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'"; 
1

, если вы хотите, чтобы получить всю испытательную базу на подобном, то, пожалуйста, используйте как этот

var getData = "SELECT * FROM Test WHERE exercise = " + exercise + " AND exerVariName LIKE '%' AND date >= '" + fromDate + "' AND date <= '" + toDate + "'";