如何将 SqlDbtype.Money = 0 与 Sql 服务器中的货币字段进行比较
Posted
技术标签:
【中文标题】如何将 SqlDbtype.Money = 0 与 Sql 服务器中的货币字段进行比较【英文标题】:How to compare SqlDbtype.Money = 0 with money field in Sql server 【发布时间】:2014-12-26 08:57:29 【问题描述】:我有一个 SQL server 2008。我有数据的表(项目)结构如下:
ID(int) Name(varchar(50)) Price(money)
1 ArchBook 1200.89
2 Freebie 0.00
3 Board 800.54
这些列的数据类型在 () 中。我有一个以价格为参数的选择存储过程
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 时,结果不正确。在 if 子句之后,我在存储过程中使用 cast 再次将其转换为货币。(How do I convert from a money datatype in SQL server?) 但它似乎不起作用。与 0 相比,我可以如何照顾的任何建议?如果价格为空,则返回所有记录。 C#代码
cnn.Open();
string amount = "0";
var command = new SqlCommand("GetItemsByPrice", cnn);
command.CommandType = CommandType.StoredProcedure;
var param = new SqlParameter("@price", SqlDbType.Money);
param.Value = Convert.ToDecimal(amount);
command.Parameters.Add(param);
var dataReader = command.ExecuteReader();
while (dataReader.Read())
//printing columns
dataReader.Close();
command.Dispose();
【问题讨论】:
检查我的答案,如果对你有帮助,请告诉我。 【参考方案1】:我认为你的逻辑是错误的。
我想GetItemByPrize
获取价格800.54
,我将收到价格为“”的商品。只需使用default value
0 和not allow nulls
制作Price
字段。
更改程序:
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)
这将保证当文本框值为“”或无效文本时价格参数为0。
【讨论】:
如果发送的价格为空,我如何处理需要返回表中所有值的情况? 关于 ui 价格是一个过滤条件。它可以是空的。所以我不能明确地将其设为零。如果为空,我想将其从 SP 中排除。 @Eve 显示您的代码...如果您想在为空时不执行,只需添加一个如果不执行该过程.. 在问题中添加您的代码。 我的错。好像我犯了一个错误。毕竟我根本不能发送空的。你有什么办法可以建议我如何处理这种情况?空和零?。如果没有在 Price 列上应用过滤,则返回所有列,如果是返回该价格的项目 @Eve 我不会使用程序。我将创建 sql select * from dbo.Items 和 if Price != null && Price!=0 添加带有条件的 where 子句并在这种情况下添加参数。在其他情况下,我将只执行 Select * from dbo.Items。如果这对您有帮助,请将答案设为正确。【参考方案2】:试试这个
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
【讨论】:
我已添加设置。我打错字了。这没有帮助 您是否尝试从 SSMS/SqlCmd 执行此 SP?查看它是否返回正确的结果,然后从您的 C# 代码中检查。如果它适用于 SSMS 而不是 C# 代码,请发布执行 SP 的代码部分。 来自 ssms。问题出在SP上。我需要处理价格可以为空的情况,在这种情况下我需要从表中返回所有字段。价格也可以为零;在这种情况下,我需要返回价格为 0 的所有记录 问题不可能出在 SP 上。它适用于我的 SQL Server 2008 R2 实例。我测试了它。它可能与您的 C# 代码有关。以上是关于如何将 SqlDbtype.Money = 0 与 Sql 服务器中的货币字段进行比较的主要内容,如果未能解决你的问题,请参考以下文章
如何将跨域资源共享与 Spring MVC 4.0.0 RESTful Webservice 集成
从 bigquery 查询整行时如何将模式与行合并 - java
如何将 oAuth2.0 与 Spring boot 1.5.8.RELEASE 集成
如何将 CameraX 与 PreviewView 一起使用?
将 D3.js 7.0.0 与 Next.js 11.0.1 一起使用时,如何解决“[ERR_REQUIRE_ESM]:必须使用导入来加载 ES 模块”?