0

这是我在 C# 中的代码:

float r_discountValue = 0;

SqlConnection con = Constant.GetConnection();

SqlCommand cmd = new SqlCommand("Coupon_GetDiscountFromValidCouponCode", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@PKCouponCode", SqlDbType.VarChar);
cmd.Parameters["@PKCouponCode"].Value = "DIS_77";

try
{
    con.Open();

    SqlDataReader reader = cmd.ExecuteReader();

    if(reader.Read()){
       r_discountValue = float.Parse(reader[0].ToString());
    }

    reader.Close();
}
catch(Exception exception)
{
    throw exception;
}
finally{
    con.Close();
}

return r_discountValue;

存储过程:

ALTER PROCEDURE [dbo].[Coupon_GetDiscountFromValidCouponCode]
    @PKCouponCode varchar(50)
AS
    SELECT * 
    FROM Coupon 
    WHERE CouponCode = @PKCouponCode AND Valid = 1

这是数据库的样子:

在此处输入图像描述

我遇到错误

输入字符串的格式不正确

我不知道出了什么问题,有什么想法吗?

4

2 回答 2

3

如果你想要折扣值,那么你应该只返回来自 SP 的折扣(因为它命名为GetDiscountfrom...)

SELECT CouponDiscount FROM Coupon WHERE CouponCode = @PKCouponCode AND Valid = 1

这将使它成为一个单列结果集,与reader[0]来自 C# 的访问相匹配。

另一个选项当然是更改 C# 端以读取第二项(索引 1)或按名称引用列,例如

r_discountValue = float.Parse(reader[1].ToString());
r_discountValue = float.Parse(reader["CouponDiscount"].ToString());

你会得到Input string was not in a correct format.,因为它正在读取float.parse无法处理的“DIS_77”。

于 2013-04-24T02:24:29.100 回答
2

您正在使用第一列即CouponCode获取折扣。而不是你需要使用第二列,即。couponDiscount

所以尝试这样的事情

 r_discountValue = float.Parse(reader["CouponDiscount"].ToString());
于 2013-04-24T02:24:12.310 回答