为什么SQL逻辑运算符在c#命令中不起作用
本文关键字:命令 不起作用 SQL 逻辑运算符 为什么 | 更新日期: 2023-09-27 17:57:38
我想获取起点和终点之间的ID,但无法筛选查询。当我在没有大于然后和小于然后运算符的情况下编写命令时,它可以工作,但会搜索所有表。
我不知道怎么解决这个问题。这是我的密码;你能帮我吗?
public async Task<int> TaskSearchSqlTweetIDText(string TweetText, string Query, int StartPoint, int EndPoint)
{
SqlConnection conn = new SqlConnection(Tools.ConnectionString);
SqlCommand comm = new SqlCommand("select ID from Tweets where @VsTweetText=TweetText and ID<@VsEndPoint and ID>@VsStartPoint", conn);
comm.Parameters.AddWithValue("@VsTweetText", TweetText);
comm.Parameters.Add("@VsStartPoint", SqlDbType.Int);
comm.Parameters["@VsStartPoint"].Value = StartPoint;
comm.Parameters.Add("@VsEndPoint", SqlDbType.Int);
comm.Parameters["@VsEndPoint"].Value = EndPoint;
if (conn.State == ConnectionState.Closed) conn.Open();
object sonuc = await comm.ExecuteScalarAsync();
conn.Close();
if (sonuc != null)
{
return (int)sonuc;
}
else
{
return 0;
}
}
您没有在问题中说明这一点,所以我假设您没有从查询中得到任何结果?
可能根本没有ID严格大于或严格小于TweetText
匹配范围的推文。您可以进行调试,看看StartPoint
和EndPoint
的值是什么,以及数据库中是否真的有一个ID严格位于它们之间,TweetText
匹配的地方。
您可以按如下方式更改语句,以包含StartPoint
和EndPoint
的值。
select ID from Tweets
where @VsTweetText = TweetText
and ID <= @VsEndPoint
and ID >= @VsStartPoint
甚至
select ID from Tweets
where @VsTweetText = TweetText
and ID BETWEEN @VsStartPoint AND @VsEndPoint
还请注意,上面的语句很可能会返回多个记录,但您在代码中使用的是ExecuteScalar
,所以您使用的是您遇到的第一个ID——随机。如果你真的只对一个ID感兴趣,你应该修改你的查询,以便更容易预测选择哪一个。
可能是这样的:
select top 1 ID from Tweets
where @VsTweetText = TweetText
and ID BETWEEN @VsStartPoint AND @VsEndPoint
order by ID desc
这将返回在该范围内找到的最大ID。
如果您从SSMS中的查询中获得了多个条目,您可能需要查看条件-为什么它会返回多个条目。严格where
条款,使之精确。
where @VsTweetText = TweetText
and ID < @VsEndPoint
and ID > @VsStartPoint
但如果你只想获得第一个条目(如果你这样做了),那么使用这个:
select top 1 ID from Tweets
where @VsTweetText = TweetText
and ID < @VsEndPoint
and ID > @VsStartPoint
因为您使用的是只能返回单个标量对象的CCD_ 9。