Я хотел бы улучшить свой SQL-запрос, выбрав ROW
Когда я использую
cmd.CommandText = "SELECT user FROM users";
в моем коде у меня есть ошибка в строке
FillComboBox(dr["user"].ToString());
Column user does not belong to the table.
Оригинальный код, который работает
public void ReadUsersInfo(string connectionString)
{
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM users";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
FillComboBox(dr["user"].ToString());
}
Console.Read();
conn.Close();
}
Вы можете показать структуру своей таблицы? Кажется, что у пользователей таблицы нет столбца с именем «пользователь».
Без структуры таблиц из SQL этот вопрос не будет полным. Пожалуйста, просмотрите Как создать минимальный, полный и проверяемый пример
Ваш фрагмент кода не имеет ничего общего с ошибкой. Это довольно простая ошибка, заключающаяся в том, что столбец «пользователь» не принадлежит вашей таблице «пользователи». Первое, что вам нужно проверить, это действительно ли. Попробуйте просто "выбрать * из имени таблицы". Или вы также можете проверить в представлении схемы, можете ли вы получить доступ к базе данных.
Подождите, ExecuteNonQuery что-нибудь возвращает?
ExecuteNonQuery ничего не возвращает
Ошибка не могла быть яснее. «ПОЛЬЗОВАТЕЛЬ КОЛОНКИ НЕ ПРИНАДЛЕЖИТ К ТАБЛИЦЕ». Как еще мы можем вам это объяснить? У вас есть столбец user в вашей таблице users ??
@Eric ctrlv.cz/mTNA Да
@SonDy Не лучше ли использовать ExecuteReader()? ExecuteNonQuery() ничего не возвращает. Вот почему вы не можете найти колонку user.
user - это ключевое слово SQL Server, которое необходимо экранировать.





Прежде всего, вы выполняете ненужные команды. При использовании адаптера данных:
Во-вторых, проверьте, правильно ли вы передаете строку подключения - убедитесь, что вы подключаетесь к базе данных изображения, а не к какой-либо другой, в которой есть таблица «пользователи», но не столбец «пользователь».
В-третьих, и последнее, на основе вашего изображения таблица и столбец существуют, поэтому приведенный ниже код должен работать.
public static void ReadUsersInfo(string connectionString)
{
const string query = "select [user] from dbo.users";
using (var dataTable = new DataTable())
{
using (var sqlConnection = new SqlConnection(connectionString))
{
using (var dataAdapter = new SqlDataAdapter(query, sqlConnection))
{
dataAdapter.Fill(dataTable);
}
}
foreach (DataRow dr in dataTable.Rows)
{
Console.WriteLine(dr["user"].ToString());
}
}
Console.ReadKey();
}
Я хотел бы улучшить свой SQL-запрос. "select * from dbo.users", чтобы выбрать пользователя из dbo.users
user - это ключевое слово, которое возвращает имя текущего пользователя базы данных. Например, select user в моей базе данных возвращает dbo.
В приведенном ниже запросе этот контекст выбирается как столбец без имени:
SELECT user FROM users
(No column name)
================
dbo
Чтобы вернуть столбец, имя которого совпадает с именем ключевого слова, вам нужно будет заключить его в квадратные скобки:
SELECT [user] FROM users