Получить данные из таблицы SQL в пустую переменную - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь найти в таблице (называемой Учетными записями) имя пользователя, а в строке этого пользователя в coulmn 4, которая называется PhotoId, есть строка, которую мне нужно получить, и добавить ее к пустому значению строки, которое я сделал ранее. вот что я попробовал я хочу сделать это с помощью запроса, как мой код

string ecid = e.CallbackQuery.Message.Chat.Id.ToString();
using (SqlCommand sqlCommand = new SqlCommand("SELECT * from Accounts where Username like @username", con))
{
    con.Open();
    sqlCommand.Parameters.AddWithValue("@username", ecid);
    string variable;
    string userfound = (string)sqlCommand.ExecuteScalar();
    con.Close();
    if (userfound == ecid)
    {
        using (SqlCommand GotPhoto = new SqlCommand("SELECT PhotoId from Accounts where Username like @user", con))
        {
            con.Open();
            GotPhoto.Parameters.AddWithValue("@user", ecid);

            DataPid = GotPhoto.ExecuteScalarAsync().ToString();
            con.Close();

            //  await bot.SendPhotoAsync("xxx", DataPid, capo, parseMode: ParseMode.Markdown, replyMarkup: zz);

            await bot.SendTextMessageAsync(cid, "its been Poster", parseMode: ParseMode.Html);
        }
    }
    else
    {
        MessageBox.Show("Not Working");
    }
}

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Согласно документации ExecuteScalar =>

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

При выполнении string userfound = (string)sqlCommand.ExecuteScalar();

Вы сравниваете имя пользователя со значением (но с одним - значением первого столбца в инструкции создания таблицы)

Предлагаю изменить первый запрос, чтобы убедиться, что select username

PS:

  • Чтобы быть непротиворечивым, вы также можете переименовать оба параметра запроса @username вместо @user и @username, поскольку они относятся к одной и той же вещи.
  • Вы можете выполнить только один запрос вместо двух. (выберите photoid ... где username = .. и просто проверьте, содержит ли результат одну строку)
0 голосов
/ 27 июня 2018

Вы комбинируете SELECT * ... с ExecuteScalar(), который «возвращает значение первого столбца в первой строке набора результатов. Дополнительные строки и столбцы игнорируются.» (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx). Возможно, имя пользователя не первый столбец в таблице счетов, поэтому содержимое другого столбца восстанавливается, и сравнение не выполняется.

Вместо этого используйте SELECT username from Accounts where Username like @username.

EDIT

В зависимости от вашей модели данных вы также можете объединить два запроса в один, когда вы запрашиваете одну и ту же строку дважды.

con.Open();
using (var cmd = new SqlCommand("SELECT PhotoId from Accounts where Username like @user", con)) {
    cmd.Parameters.AddWithValue("@user", ecid);
    using (var reader = await cmd.ExecuteReaderAsync()) {
        if (!reader.HasRows || ! reader.Read()) {
            MessageBox.Show("User not found");
        } else {
            DataPid = cmd.GetYOURDATATYPE(0).ToString();
            //....
        }

    }
}
con.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...