C# 如何将SqlDbtype.Money=0与Sql server中的Money字段进行比较

C# 如何将SqlDbtype.Money=0与Sql server中的Money字段进行比较,c#,sql,C#,Sql,我有一个SQL server 2008。我拥有的tableItems结构和数据如下: ID(int) Name(varchar(50)) Price(money) 1 ArchBook 1200.89 2 Freebie 0.00 3 Board 800.54 这些列的数据类型位于中。我有一个select存储过程,它将pri

我有一个SQL server 2008。我拥有的tableItems结构和数据如下:

ID(int)   Name(varchar(50))         Price(money)
 1        ArchBook                 1200.89
 2        Freebie                  0.00
 3        Board                    800.54
这些列的数据类型位于中。我有一个select存储过程,它将price作为参数

 create procedure dbo.GetItemByPrice
 @price money 
 as
 begin
 if @price = '' OR @price is NULL
 set @price = ''
 select * from dbo.Items 
 where @price = '' OR price = @price
 end
当我从C代码中为价格发送0时,结果是不正确的。我使用cast-in存储过程在if子句之后再次将其转换为货币。但它似乎不起作用。与0相比,有什么关于我如何处理的建议吗?如果价格为空,则返回所有记录。 C代码

试试这个

CREATE PROCEDURE dbo.GetItemByPrice
@price money 
as
BEGIN
if @price = '' OR @price is NULL
SET @price = ''
select * from dbo.Items 
where @price = '' OR price = @price
END
我认为你的逻辑是错误的

我想获得价格为800.54的ItemByPrize,我将收到价格为的物品。只需将价格字段设置为默认值0,并且不允许为空

更改程序:

编辑:

如果您以文本框中的价格值为例:下面是代码示例

decimal price = 0;

decimal.TryPrase(priceTxtBox.Text, out price);

cmd.Parameters.AddWithValue(@"price", price)

这将保证当文本框值为或无效文本时,价格参数将为0。

检查我的答案,并告诉我是否有帮助。我已添加了设置。我打字出错了。这没有帮助您是否尝试从SSMS/SqlCmd执行此SP?查看是否返回正确的结果,然后从C代码中进行检查。如果它是从SSMS而不是从C代码中工作的,那么请发布代码中执行SSMS中SP的部分。问题在于SP。我需要处理一个price可以为空的情况,在这种情况下,我需要返回表中的所有字段。而且价格可以是零;在这种情况下,我需要返回所有价格为0的记录。问题不可能出在SP上。它在我的SQL Server 2008 R2实例上工作。我测试过了。可能是你们的C代码。若发送的价格为空,我如何处理需要返回表中所有值的情况?在ui上,价格是一个筛选条件。它可以是空的。所以我不能把它变成零。如果为空,我想将其从SP中排除。@Eve显示您的代码。。。如果您想在为空时不执行,只需添加一个if to not execute the procedure。。在问题中添加你的代码。我的错。好像我犯了个错误。毕竟,我不能发送空邮件。你有没有办法建议我如何处理这种情况?空的和零的一样?。若未对价格列应用过滤,则返回所有列,若为该列的返回项price@Eve我不会使用这个程序。我将从dbo.Items和if Price创建sql select*空&价格=0使用条件添加where子句,并在本例中添加参数。在其他情况下,我将只从dbo.Items执行Select*。如果这对你有帮助,请确保答案正确。
CREATE PROCEDURE dbo.GetItemByPrice
@price money 
as
BEGIN
select * from dbo.Items 
where price = @price
END
decimal price = 0;

decimal.TryPrase(priceTxtBox.Text, out price);

cmd.Parameters.AddWithValue(@"price", price)