为了账号安全,请及时绑定邮箱和手机立即绑定

选择TOP 5仅在通过代码调用时返回一行,其中同一脚本在SQL Server中返回5行

选择TOP 5仅在通过代码调用时返回一行,其中同一脚本在SQL Server中返回5行

C#
潇潇雨雨 2021-05-12 17:42:26
使用下面的代码块提取前5条记录时,与在SQL Sever 2008中运行相同的脚本相比,我得到的结果截然不同。DataTable results = new DataTable();string cmdTxt = String.Format("select top 5 ID, NAME from TABLE where ID like @ID or NAME like @NAME order by ID asc");using (SqlCommand cmd = new SqlCommand(cmdTxt, Butch.connection)){    cmd.Parameters.Add("@ID", SqlDbType.Char, 15).Value = IdBox.Text + "%";    cmd.Parameters.Add("@NAME", SqlDbType.Char, 65).Value = IdBox.Text + "%";    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))           adapter.Fill(results); }例如,将参数'0'传递到IdBox中,结果ID为'01'的结果为一行,但是在SQL Server中,ID为'000001','000002','000003','000004'的结果返回5行,'000005'。传递“ 00”将返回我的代码中的零行,但是从SQL Server中返回相同的5行。如果我通过'00000',我将从代码中获得与从SQL服务器获得的结果相同的结果。无论如何,有没有让我的代码返回与SQL查询相同的结果?我试图在代码参数中使用更多的通配符,以防它只针对一个字符进行检查,但这是行不通的。我在使用NVarChar SqlDataType的其他地方也有相同的代码,但是我不知道为什么它在这里不起作用。
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

SqlDbType.Char对应于CHAR,如果需要,将其空白填充为恰好给定的长度。

您的查询最终像是这样:

select top 5 ID, NAME from TABLE where ID like '0%             ' or NAME like '%                                                                ' order by ID asc

而且该模式将不匹配。

尝试SqlDbType.VarCharSqlDbType.NVarChar(如果相应的列也是N...如此)。


查看完整回答
反对 回复 2021-05-21
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信