Сравнение значения текстового поля с базой данных - PullRequest
0 голосов
/ 06 мая 2010

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

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;
}

Ответы [ 5 ]

0 голосов
/ 08 июня 2010

если ваше поле идентификатора имеет тип int, вы не должны ставить 'вокруг него.

так изменить

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

до

 + " WHERE users.ID=" +Convert.ToInt16(id.iDTextBox.Text); 
0 голосов
/ 06 мая 2010

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

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.

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

Также попробуйте запустить запрос с жестко заданным значением id в редакторе 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 голосов
/ 06 мая 2010

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

0 голосов
/ 06 мая 2010

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

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

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

0 голосов
/ 06 мая 2010

ваша строка подключения должна выглядеть так:

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

Дополнительную информацию о строках подключения вы можете найти на connectionstrings.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...