0

理解できないような奇妙な問題があります。サーバー上で実行している商用アプリケーション用の Web コンポーネントを作成しました。cbxGramEnabled.Checkedtoを変更するTrueFalse、関数が正常に実行され、変更が行われます。ただし、cbxGramEnabled.Checked関数を離れると、DB は更新されません。

コンポーネントを実行するコードは次のようになります。

private void WriteToSQL( )
{
    WriteEnableGram( _pkKey, cbxGramEnabled.Checked);
}

これcbxGramEnabled.CheckedCheckBox、Web アプリのカスタム コンポーネントです。

private void WriteEnableGram( int nPKkey, bool bChecked)
{
    string szQuery = string.empty;

    if (bChecked == true)
        szQuery = "UPDATE dbo.CustomKeyAttr SET EnableGram = 1 WHERE pkCustomKeyAttr = " + nPKkey.ToString() + ";";
    else
        szQuery = "UPDATE dbo.CustomKeyAttr SET EnableGram = 0 WHERE pkCustomKeyAttr = " + nPKkey.ToString() + ";";


    try
    {
        string szConString = @"Data Source=.\sqlexpress;Initial Catalog=MetricDB;User ID=webuser;Password=mypass;"; 
        using (var Conn = new SqlConnection(szConString))
        {
            Conn.Open();
            using (SqlCommand dbQuery = new SqlCommand(szQuery, Conn))
            {
                dbQuery.ExecuteNonQuery();
            }
        }
    }
    catch (SqlException)
    {
    }
    catch (Exception)
    {
    }
    finally
    {
        cbxEnableGram.Text = szQuery; // at least display what the query is somewhere on the page....
    }
}
4

1 に答える 1

0

まず、次のことが当てはまると仮定しましょう。

ブール値は次のようになりtrueます。falseまたはnull(未割り当て)。

チェックボックスのcheckedプロパティは、これらの値を持つことができます。それも仮定しよう

コードのその行に実行時cbxGramEnabledのインスタンスへの参照が含まれている場合、そのフレームワークの実装に奇妙なバグがない限り、 の値は決してあり得ません。これは .NET チェックボックスだと思いますか? 説明: 参照は、そのオブジェクトのコンストラクターが実行を終了し、すべてのプロパティを とは異なるデフォルト値に設定した場合にのみ存在します。Checkboxcheckednullnull

checkedプロパティの値がまたは のいずれtruefalseである場合、コードは正常に実行されるため、リテラルの true/false 値を使用した試みによって証明されているため、実際の値は であると確信していますnullステートメント 2は、コード内のその時点でオブジェクト参照が含まれていないことを証明しています。cbxGramEnabled

基本的に、変数cbxGramEnabledには実際の値はなく、null参照が含まれています。その原因は、このチェックボックスが作成される前にコードが実行されることです。

通常、Web アプリでは、これはページがまだロード中 (コンポーネントの作成中) で、ページが完全にロードされる前にコードが実行されている場合に発生します。これは、サーバーへのラウンドトリップの間に発生している可能性があります!! 私はそれがあなたの問題があるところだと確信しています....

于 2012-11-03T01:14:44.277 に答える