Select TOP 5 在通过代码调用时只返回一行,其中相同的脚本 returns SQL 服务器中的 5 行

Select TOP 5 only returning one row when called through code, where same script returns 5 rows in SQL Server

当使用以下代码块提取前 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 服务器中,我得到了 5 行 Id 为“000001”、“000002” ', '000003', '000004', '000005'。传递 '00' 将 return 来自我的代码的零行,但来自 SQL 服务器的相同 5 行。如果我传递 '00000',我将从代码中得到与从 SQL 服务器中得到的结果相同的结果。

是否可以使我的代码 return 与 SQL 查询的结果相同?我曾尝试在我的代码参数中使用更多的通配符,以防它只针对一个字符进行检查,但这没有用。我在其他地方使用相同的代码使用 NVarChar SqlDataType,但我不知道为什么它在这里不起作用。

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...)。