2010-05-05 4 views
0

HI! Я хотел бы сравнить значения из текстового поля с данными из таблицы. Я пробовал этот код, но я получил ошибку, что входная строка была в неправильном формате! код:Сравнивая значение текстового поля с базой данных

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 
    loadDataGrid(queryString); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 
+1

Вы уверены, что текстовое поле это все цифры? Возможно, вместо этого используйте int.TryParse. –

+0

Также прочитайте о защите от Sql Injection! Это классический пример потенциала Sql Injection! http://en.wikipedia.org/wiki/SQL_injection –

+0

Справедливо. Был просто следствием. Новый взгляд на этот сайт часто забывает следить за заданными вопросами. –

ответ

0

ваш ConnectionString должен выглядеть следующим образом:

Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = C: \ mydatabase.mdb; Пользователь Id = администратора; Password =;

Дополнительная информация о ConnectionStrings вы можете найти на connectionstrings.com

0

при построении SQL, вы пытаетесь объединить строку и значение Int16. попробуйте удалить Convert.ToInt16(), оставив только строковое значение текстового поля.

+0

Я получаю сообщение об ошибке в условном выражении (это то, что сказала программа) – simon

0

Попробуйте изменить последнюю строку

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 

в основном удаления одинарные кавычки из вокруг Int16

+0

i get и ошибка в sql Синтаксис – simon

0

Вы можете попробовать это:

string connectionString = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=save.mdb"; 

try 
{ 
     Int16 id = Int16.Parse(id.iDTextBox.Text); 

    database = new OleDbConnection(connectionString); 
    database.Open(); 
    string queryString = "SELECT zivila.naziv,users.user_name FROM (obroki_save " 
     + " LEFT JOIN zivila ON zivila.ID=obroki_save.ID_zivila) " 
     + " LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika " 
     + " WHERE users.ID=" + id.ToString(); 
    loadDataGrid(queryString); 
     database.Close(); 
} 
catch (FormatException fex) 
{ 
    MessageBox.Show(fex.Message); 
    return; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
    return; 
} 

Таким образом, вы бы перехватывать неверные данные и защитите себя от инъекции Sql.

Кроме того, не забудьте закрыть свое соединение или прочитать с помощью using keyword.

попробовать также для выполнения запроса со значением идентификатора закодированного в редакторе SQL, чтобы убедиться, что он работает:

SELECT zivila.naziv,users.user_name 
FROM (obroki_save AS os LEFT JOIN zivila AS z ON z.ID=os.ID_zivila) 
LEFT JOIN users ON users.ID=obroki_save.ID_uporabnika 
WHERE users.ID=16 
+0

Я все еще получаю ту же ошибку (строка ввода в неправильном формате) – simon

+0

a все еще получает ошибку. черт. – simon

0

если ваш ID поля является INT, вы не должны класть 'вокруг него.

так изменить

+ " WHERE users.ID='" +Convert.ToInt16(id.iDTextBox.Text)+"'"; 

в

+ " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 
Смежные вопросы