我有一个SQL server 2008.具有数据的表(Items)结构如下:
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子句之后将其转换为金钱。(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();
答案 0 :(得分:0)
试试这个
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
答案 1 :(得分:0)
在我看来,你的逻辑被打破了。
我希望GetItemByPrize
代价为800.54
,我会收到价格为“”的商品。只需使用Price
0 和default value
创建not allow nulls
字段即可。
更改程序:
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。