IviKAZAZI Ответов: 2

Получить результат Sql-запроса с помощью datareader. C#


Всем привет,

Я пытаюсь заполнить некоторые текстовые поля значениями из таблицы базы данных.когда я пишу имя в текстовом поле,я использую его в качестве параметра для запроса,результат запроса должен показывать значения в разных текстовых полях,например фамилию в одном текстовом поле, идентификатор в другом и т. д.Есть ли какой-нибудь способ сделать это??

я не англичанин, так что надеюсь, вы меня поймете.

вот часть моего кода, та часть, где я проверяю, нажат ли enter, подключаюсь к БД, ниже приведены 3 способа для datareader, но ни один из них ничего не показывает:


private void CheckKeys(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            string _connString = String.Format(System.Globalization.CultureInfo.InvariantCulture,
            @"Data Source = {0}\SQL_CE.sdf", Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase));
            SqlCeConnection _connection = new SqlCeConnection(_connString);

            

            if (e.KeyChar == (char)13)
            {

                SqlCeCommand command = new SqlCeCommand("SELECT surname, ID FROM Data where name=@name;", _connection);
                
                command.Parameters.Add("@name", txt_name.Text);

                _connection.Open();
                SqlCeDataReader rdr = command.ExecuteReader();
                    
                if(rdr.Read())
                {
     
                    txt_surname.Text=Convert.IsDBNull(rdr["Surname"]) ? "" : Convert.ToString(rdr["Surname "]);
                    txt_ID.Text = rdr["ID"].ToString();

                    }
                    rdr.Close();

                }

Herman<T>.Instance

что вы пробовали? Пожалуйста, покажите свой код и покажите, где вы застряли. Таким образом, мы можем помочь вам.

2 Ответов

Рейтинг:
9

Ganesan Senthilvel

Вот пример кода:

this.textBoxName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(CheckKeys);


private void CheckKeys(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
 if (e.KeyChar == (char)13)
 {
   // Then Enter key was pressed
   string ConnectionString = "server=xxx;userid=aaa;"+ "pwd=bbb;database=northwind";
   con = new SqlConnection(ConnectionString);
   con.Open();
  string CommandText = "SELECT SurName" +
                       "  FROM Employees" +
                       " WHERE (Name LIKE @)" + textBoxName.Text;
  cmd = new SqlCommand(CommandText);
  rdr = cmd.ExecuteReader();
  while(rdr.Read())
  {
     textSurName = rdr["SurName"].ToString()
  }
 }
}


IviKAZAZI

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

Рейтинг:
20

OriginalGriff

Это не точный код, но это отправная точка. Там есть все, что вам нужно.

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT description FROM myTable WHERE ID=@ID", con))
        {
        cmd.Parameters.AddWithValue("@ID", myId);
        using (SqlDataReader reader = cmd.ExecuteReader())
            {
            while (reader.Read())
                {
                string desc = (string) reader["description"];
                Console.WriteLine("ID: {0}\n    {1}", myId, desc);
                }
            }
        }
    }


IviKAZAZI

я хочу получить несколько значений и установить их в разных текстовых полях

OriginalGriff

Добавленный код показывает, что вы извлекаете два элемента из строки и сохраняете их в разных текстовых полях.
Однако я не могу гарантировать, что это принесет что-нибудь.
Во - первых, не используйте "магические числа", такие как "(char)13" - используйте системные имена, если это возможно. В данном случае это: ключи.Return - это значение, которое вы должны проверить.
Во-вторых, это зависит от того, где вы подключили свой обработчик событий и где находится курсор ввода пользователя.
Если вы обрабатываете его для формы, то это не произойдет, когда курсор находится в текстовом поле, если только свойство "KeyPreview" формы не установлено в значение "true".
Вы пробовали поставить точку останова в строке объявления _connString и пройти через свой код?