Привет, ребята, мне нужно показать на моем лейбле слова из моей базы данных, и у меня проблема, это не работает для меня и не показывает слова ... Я использую Select from и не показываю его ...
string connectionStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\WordssTable.mdb;
Persist Security Info=False";
OleDbConnection connectObj = new OleDbConnection(connectionStr);
connectObj.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connectObj;
command.CommandText = "SELECT * FROM WordsTable WHERE EnglishWord='" + hebw1.Text + "'";
command.ExecuteNonQuery();
<form runat = "server">
<div id = "Words">
<asp:Label runat = "server" id = "Engw"></asp:Label>
<br />
<asp:Label id = "hebw1" runat = "server"></asp:Label>
<asp:Label id = "hebw2" runat = "server"></asp:Label>
<asp:Label id = "hebw3" runat = "server"></asp:Label>
<asp:Label id = "hebw4" runat = "server"></asp:Label>
</div>
</form>
Что мне добавить, братан?
Возможно, вы захотите рассмотреть элемент управления DataSource, так как вы работаете с веб-формами. Связанная документация в основном демонстрирует использование MS SQL Server, но разница очень небольшая.
ваша проблема в том, что вы вызываете command.ExecuteNonQuery (), которая возвращает только количество затронутых строк. Вам нужно изменить это на
command.CommandText = "SELECT * FROM WordsTable WHERE EnglishWord='" + hebw1.Text + "'";
OleDbReader reader = command.ExecuteReader();
while(reader.Read()){
// set your label values here
}
Первое, что нужно сделать, это использовать правильный заявление с использованием вокруг одноразовых объектов. Затем измените текст команды, чтобы использовать заполнители параметров (@text) вместо конкатенации строк. (Это никогда не следует недооценивать. Параметры предотвращают ошибки синтаксического анализа и взломы sql-инъекций)
Теперь вы готовы запросить OleDbDataReader и использовать его для заполнения вашей метки данными, поступающими из первой записи, полученной OleDbDataReader.
string connectionStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\WordssTable.mdb;
Persist Security Info=False";
using(OleDbConnection connectObj = new OleDbConnection(connectionStr))
using(OleDbCommand command = new OleDbCommand())
{
connectObj.Open();
command.Connection = connectObj;
command.CommandText = "SELECT * FROM WordsTable WHERE EnglishWord=@text";
command.Parameters.Add("@text", OleDbType.VarWChar).Value = hebw1.Text;
using(OleDbDataReader reader = command.ExecuteReader())
{
// Try to read the first record, if any, and then update the labels
if (reader.Read())
{
hebw1.Text = reader["hebw1"].ToString();
hebw2.Text = reader["hebw2"].ToString();
hebw3.Text = reader["hebw3"].ToString();
hebw4.Text = reader["hebw4"].ToString();
}
}
}
Я предполагаю, что ваша запись содержит столбец hebwX, используемый индексатором считывателя, и ни одно из этих полей не является пустым.
Ваш образец неполный. Вы выполнили команду? Вы использовали данные, возвращаемые OleDbDataReader, для обновления ваших этикеток? Отправьте минимальный воспроизводимый пример, чтобы помочь нам разобраться в вашей проблеме