Как улучшить SQL-запрос, выбрав строку

Я хотел бы улучшить свой 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();
}
Пользователь столбца не принадлежит таблице Мне кажется довольно ясное сообщение об ошибке.
Steve 10.04.2018 17:30

Вы можете показать структуру своей таблицы? Кажется, что у пользователей таблицы нет столбца с именем «пользователь».

Alexandru Popa 10.04.2018 17:33

Без структуры таблиц из SQL этот вопрос не будет полным. Пожалуйста, просмотрите Как создать минимальный, полный и проверяемый пример

Mad Myche 10.04.2018 17:37

Ваш фрагмент кода не имеет ничего общего с ошибкой. Это довольно простая ошибка, заключающаяся в том, что столбец «пользователь» не принадлежит вашей таблице «пользователи». Первое, что вам нужно проверить, это действительно ли. Попробуйте просто "выбрать * из имени таблицы". Или вы также можете проверить в представлении схемы, можете ли вы получить доступ к базе данных.

geekidharsh 10.04.2018 17:40

Подождите, ExecuteNonQuery что-нибудь возвращает?

Dejan Dozet 10.04.2018 18:00
ctrlv.cz/mTNA
SonDy 10.04.2018 18:01

ExecuteNonQuery ничего не возвращает

SonDy 10.04.2018 18:06

Ошибка не могла быть яснее. «ПОЛЬЗОВАТЕЛЬ КОЛОНКИ НЕ ПРИНАДЛЕЖИТ К ТАБЛИЦЕ». Как еще мы можем вам это объяснить? У вас есть столбец user в вашей таблице users ??

Eric 10.04.2018 18:25

@Eric ctrlv.cz/mTNA Да

SonDy 10.04.2018 18:39

@SonDy Не лучше ли использовать ExecuteReader()? ExecuteNonQuery() ничего не возвращает. Вот почему вы не можете найти колонку user.

Eric 10.04.2018 18:43
user - это ключевое слово SQL Server, которое необходимо экранировать.
Paul Williams 10.04.2018 18:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Прежде всего, вы выполняете ненужные команды. При использовании адаптера данных:

  • перед этим открывать соединение не нужно;
  • или даже создать команду;
  • или ни один из них не выполняет команду.

Во-вторых, проверьте, правильно ли вы передаете строку подключения - убедитесь, что вы подключаетесь к базе данных изображения, а не к какой-либо другой, в которой есть таблица «пользователи», но не столбец «пользователь».

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

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

SonDy 10.04.2018 18:35
Ответ принят как подходящий

user - это ключевое слово, которое возвращает имя текущего пользователя базы данных. Например, select user в моей базе данных возвращает dbo.

В приведенном ниже запросе этот контекст выбирается как столбец без имени:

SELECT user FROM users

(No column name)
================
dbo

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

SELECT [user] FROM users

Другие вопросы по теме