C# 如何将SqlDbtype.Money=0与Sql server中的Money字段进行比较
我有一个SQL server 2008。我拥有的tableItems结构和数据如下: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
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)