ユーザーがExcelファイルの形式でアップロードしたデータを検証するWebフォームで作業しています。コードはスプレッドシートの各行を繰り返し処理し、さまざまなルールをチェックします。その1つは、参照が一意の値でなければならないということです。私はSQL Server Management Studioを(SSMS)でさまざまなシナリオをしようとすると、私は希望の出力などを得る一貫性のない戻り値を提供するストアドプロシージャ
BEGIN
SET NOCOUNT ON;
DECLARE @Status AS BIT
IF EXISTS (SELECT [TransactionMstID]
FROM [dbo].[tbl_TransactionMst]
WHERE [TransactionRef] = @DocumentNumber
AND [SupplierID] = @SupplierID)
BEGIN
SET @Status = 0
END
ELSE
BEGIN
SET @Status = 1
END
SELECT @Status AS [Status]
END
:私は、パラメータとしてuserID
とreferenceNum
を取るストアドプロシージャを持っています参照が存在するときには「0」を、そうでなければ「1」を返す。
私のC#コードでは、ストアドプロシージャが実行されますが、テストではデータが存在するかどうかにかかわらず同じ結果が得られます。
は、ここでのC#のコアです:
bool returnValue = true;
if (Docnumber != null)
{
SqlConnection con = new SqlConnection(GlobalSettings.connection);
con.Open();
SqlCommand Cmd = new SqlCommand("p_ValRefNumber", con);
Cmd.CommandType = System.Data.CommandType.StoredProcedure;
Cmd.Parameters.AddWithValue("@DocumentNumber", Docnumber);
Cmd.Parameters.AddWithValue("@SupplierID", SupplierID);
Cmd.ExecuteNonQuery();
SqlDataReader dr = Cmd.ExecuteReader();
while (dr.Read())
{
bool Status = convertor.ConvertToBool(dr["Status"]);
string test = dr["Status"].ToString();
int testint = convertor.ConvertToInt(dr["Status"].ToString());
if (Status == false)
{
//throw new System.Exception(CEObj.GetErrorDesc(101));
returnValue = false;
}
}
dr.Close();
con.Close();
}
return returnValue;
}
はどんなにdocnumber
の値がテストにあるもの、それは常にTrue
として示していません。ブレークポイントを追加したので、毎回チェックしてからSSMSでテストすると、矛盾する結果が得られます。
私のロジックは間違っていますか? Visual Studioは値を別々に扱いますか? string
に変換すると、結果はどのように一貫していませんか?常にVSで「1」の値を読んでいるようだが、SSMSで
編集を変化させる:ここに私のコンバータ方式のコードです:
public static bool ConvertToBool(object value)
{
bool result = false;
if (value != null)
{
bool.TryParse(value.ToString(), out result);
}
return result;
}
Docnumberにブレークポイントを設定します。ステートメントがTrueと評価されるときの値は何ですか? –
現時点では '12324'です - '[tbl_TransactionMst]'にこのユーザのために存在しないランダムな文字列 – Daniel
コンバータのコードはどこですか?多分それはあなたが思っていることをしていないでしょう。デバッガでconvertor.ConvertToBoolを実行することをお勧めします。 – Polyfun