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

使用下面的代码块提取前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的其他地方也有相同的代码,但是我不知道为什么它在这里不起作用。


潇潇雨雨
浏览 103回答 1
1回答

慕运维8079593

SqlDbType.Char对应于CHAR,如果需要,将其空白填充为恰好给定的长度。您的查询最终像是这样:select top 5 ID, NAME from TABLE where ID like '0%             ' or NAME like '%                                                                ' order by ID asc而且该模式将不匹配。尝试SqlDbType.VarChar或SqlDbType.NVarChar(如果相应的列也是N...如此)。
打开App,查看更多内容
随时随地看视频慕课网APP