我正在尝试在表(称为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");
}
}
答案 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
,因为它完全是指同一件事。