从SQL表获取数据到空变量

时间:2018-06-27 14:39:37

标签: c# sql

我正在尝试在表(称为Accounts)中搜索用户名,并且在此用户的第4行中调用了PhotoId,其中有一个字符串需要获取,并将其添加到之前创建的空字符串值中。多数民众赞成在我试过 我想像我的代码一样通过Query来完成

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 :(得分:0)

您正在将SELECT * ...ExecuteScalar()组合在一起,这“返回结果集第一行中第一列的值。其他行和列将被忽略。”(https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx )。可能用户名不是accounts表中的第一列,因此,另一列的内容被更改,因此您的比较失败。

改为使用SELECT username from Accounts where Username like @username

编辑

根据您的数据模型,您还可以将两个查询合并为一个查询,因为您要查询同一行两次。

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();

答案 1 :(得分:0)

根据ExecuteScalar =>

的文档

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

执行string userfound = (string)sqlCommand.ExecuteScalar();

您正在将用户名与一个值进行比较(但其中一个?创建表指令中第一列的值)

我建议您更改第一个查询以确保为select username

PS:

  • 为保持一致,您还可以重命名两个查询参数@username而不是@user@username,因为它完全是指同一件事。
  • 您只能执行一个查询,而不是两个。 (选择photoid ...,其中username = ..,然后检查结果是否包含一行)