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

DB は次のようになります。

ここに画像の説明を入力

エラーが発生しました

入力文字列は、正しい形式ではありませんでした

何がうまくいかないのかわかりません。何かアイデアはありますか?

4

2 に答える 2

3

割引値が必要な場合は、SP からの割引のみを返す必要があります (名前付けられているためGetDiscountfrom...)

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

reader[0]これにより、C# からのアクセスと一致する 1 列の結果セットになります。

他のオプションはもちろん、C# 側を変更して 2 番目の項目 (インデックス 1) を読み取るか、名前で列を参照することです。

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

処理できないInput string was not in a correct format.「DIS_77」を読み込んでいたため、取得したことになります。float.parse

于 2013-04-24T02:24:29.100 に答える
2

最初の列、つまりCouponCode割引を取得するために使用しています。その代わりに、2 番目の列を使用する必要があります。couponDiscount

だから、このようなことを試してください

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