2013-09-10 6 views
-1

Я немного нуждается в вашей помощиНевозможно получить данные из базы данных

В моем веб-приложение, у меня есть этот Select заявление, но когда я запускаю его, он получает 0 данные, но когда я пытаюсь мой Select в базе данных, в нем есть данные, а мой оператор Select верен, кстати, мое приложение уже опубликовано на сервере.

Вот мой код

string SelectStatement = "SELECT DATEDIFF(day, kg1653, GETDATE()) datenum, kg1635, (CASE WHEN kg1637 is null THEN 0 END) eis "; 
string FromStatement = "FROM hsi.keygroupdata503 "; 
string WhereStatement = "WHERE kg1235='" + _securityCode + "' and kg1241 is null"; 
_sqlDT = ConnectToDatabase(SelectStatement + FromStatement + WhereStatement); 

и вот моя строка соединения

System.Data.Odbc.OdbcConnection _odbcConn = new System.Data.Odbc.OdbcConnection(); 
_odbcConn.ConnectionString = "MY DATABASE CONNECTION STRING"; 

System.Data.Odbc.OdbcDataAdapter _odbcA = new System.Data.Odbc.OdbcDataAdapter(sqlQuery1, _odbcConn); 
DataTable _odbcDt = new DataTable(); 
_odbcA.Fill(_odbcDt); 

return _odbcDt; 

Может кто-то пожалуйста, помогите мне с этим?

Большое вам спасибо!

+3

Ваш запрос широко открыт для атаки SQL-инъекций. Не связывайте строки, подобные этому, при написании запросов! – alroc

+2

С C# 4.0 и SQL Server - *** Почему, черт возьми, вы используете устаревшие вещи ODBC ?? –

+0

@alroc Привет! Спасибо, что ответили, что мне делать? Это вызывает мою проблему? – JanMichael

ответ

0

Когда sqlQuery1 устанавливается в _sqlDT ... лучше всего отлаживать и видеть, что запрос прав на строке его вызываемого и скопировать его на SQL-сервер, если что-то еще обновляет его или _scurityCode пуст. Кроме того, если у вас есть тестовая среда с похожими именами таблиц, убедитесь, что вы подключаетесь к одному и тому же экземпляру live.

Боковое примечание, не надежное, но убедитесь, что _securityCode имеет оператор replace и меняет все одинарные кавычки на двойные кавычки для работы с SQL-инъекцией в качестве комментария выше.

+0

Привет Я использовал htmlEncode для своего текстового поля для SecurityCode, потому что у меня такой формат в коде безопасности «& IyexP4y: & 5Zuwe5FXf3» влияет ли это на мой код? – JanMichael

+0

Да, SQL нуждается в нем в том же необработанном формате, драйвер ODBC не будет транслировать синтаксис. Перед отправкой в ​​ящик sql убедитесь, что он правильно указан в вызывающей службе внутри строки. Просто бросьте точку останова и взгляните на то, что получает SQL. Если у вас проблемы с декодированием, см. [Link] (http://stackoverflow.com/questions/122641/how-can-i-decode-html-characters-in-c) – sasonic

+0

HTMLEncode & замена символов недостаточно для защиты от SQL-инъекции. Используйте подготовленные заявления! – alroc

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