Sqldatareader和rowcount

时间:2010-05-04 08:34:17

标签: c# sql-server-2005 tsql

我有一个问题:

declare @Code nvarchar(100)
select @Code="BMW"
select name from NewCars where code=@Code
if @@rowcount = 0
Select name from OldCars where code=@Code

在Sql管理工作室的第一部分给我0个resuklts,第二个1个结果,这没关系,但是 在sqldatareader中,我使用相同的source来源查询:

declare @Code nvarchar(100)
select @Code="BMW"

因为我使用:

cmd.Parameters.AddWithValue("@Code", "BMW");

并且

 using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Name= reader["Name"].ToString();
                            }
                        }
                        else
                        {
                            throw new NotSupportedException("Lack of car with this Code");
                        }
                    }

给我零结果

1 个答案:

答案 0 :(得分:3)

数据库会产生多个结果,因此如果第一个结果为空,则需要使用reader.NextResult()继续第二个结果。

您还可以通过检查第一个选择是否包含任何内容来使查询返回单个结果:

declare @Code nvarchar(100)
select @Code="BMW"
if (exists(select * from NewCars where code=@Code)) begin
  select name from NewCars where code=@Code
end else begin
  select name from OldCars where code=@Code
end