首页 > 解决方案 > 从 SQL 表中获取数据到空变量

问题描述

我正在尝试在表(称为帐户)中搜索用户名,并且在第 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");
    }
}

标签: c#sql

解决方案


您正在组合 a SELECT * ...with 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

编辑

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

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

推荐阅读