Member 14630006 Ответов: 1

Как выбрать идентификатор по имени в базе данных access


я пытаюсь ввести как имя в txtbox, а затем нажать кнопку, чтобы поместить идентификатор этого имени в счетчик, но я получаю ошибку (
Data type mismatch in criteria expression.
)
когда нажимаете кнопку и если это другой язык, то он показывает ошибку syntx какие-то идеи ?

Что я уже пробовал:

OleDbConnection cn = new OleDbConnection();


          cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database9.accdb";
          OleDbCommand cmd = new OleDbCommand();

          cn.Open();
          cmd.Connection = cn;
          cmd.CommandText = "Select ID from Contacts where City=" +srchbox.Text;

          OleDbDataReader reader = cmd.ExecuteReader();

          while (reader.Read())
          {
              txtsrch.Text = reader.GetString(reader.GetOrdinal("ID"));
              o = Int32.Parse(txtsrch.Text);
          }

F-ES Sitecore

Чтобы ответить на ваш конкретный вопрос, вам нужно поместить текст в кавычки. Ваш sql-это

Выберите ID из списка контактов, где City=London

так и должно быть

Выберите ID из списка контактов, где City='London'

cmd.CommandText = "Select ID from Contacts where City='" +srchbox.Текст + "'";

Однако вы не должны строить sql таким образом, google how to use parameterized queries as the code you are using leaves you open to sql injection attacks.

Richard Deeming

cmd.CommandText = "Select ID from Contacts where City = ?";
cmd.Parameters.AddWithValue("city", srchbox.Text);

using (OleDbDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        int id = reader.Field<int>("ID");
        // Do something with the ID here...
    }
}

1 Ответов

Рейтинг:
2

RickZeeland

В дополнение к совету F-ES Sitecore, вот пример параметризованного запроса:
Объект oledbcommand.Свойство Параметров (System.Data.OleDb) | Microsoft Docs[^]


Member 14630006

это сработало но идентификатор показывающий только 0 он не работает на этом коде Скрыть   скопировать код

  txtsrch.Text = reader.GetString(reader.GetOrdinal("ID"));
поэтому я его меняю Скрыть   скопировать код
 o=reader.GetOrdinal("ID"); 


и это показывает 0 для всего города

RickZeeland

А что произойдет, если вы поставите точку останова на линию и проверите все значения, возвращаемые во время цикла?