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.VarChar
或SqlDbType.NVarChar
(如果对应的列也是N...
)。
当使用以下代码块提取前 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.VarChar
或SqlDbType.NVarChar
(如果对应的列也是N...
)。