0

テーブル フィールドを更新するドロップダウン リストでエラーがスローされます。アイテムのリストに存在しないため、SelectedValue が無効であると主張しています。テーブルに移動して ID にゼロを追加すると、エラーはスローされなくなりました。

ドロップダウンは、Teacher テーブルから主キーである teacherid を選択し、ID を Classes テーブルに保存します。クラス テーブルには、先行ゼロなしでゼロで始まるすべての ID が保存されます。

そのため、Classes テーブルの tid が 0701234 の場合、701234 として保存されますが、両方のテーブルは nvarchar(255) です。Classes テーブルが tid に int データ型を使用していたことを付け加えておきます。なので、これを回避するために変更しました。存在しないレコードは更新できないため、変更後も上記のエラーがスローされます。

ここにコントロールがあります

<asp:DropDownList ID="teacherdd1" runat="server" AutoPostBack="true" 
    DataSourceID="SQLdatasourceTeacherList"
    DataTextField="fullname1" DataValueField="tid" >
</asp:DropDownList>

どうすればいいのか、なぜこれが起こっているのかわかりません。

非常に簡単です。テストするテキストボックスに切り替えましたが、これを再確認するのを忘れていました。私の見落とし。

ありがとう

cmdUpdate.Parameters.Add("@TID1", SqlDbType.Int).Value = teacherdd1.SelectedValue.ToString() cmdUpdate.Parameters.Add("@TID2", SqlDbType.Int).Value = teacherdd2.SelectedValue.ToString() 'cmdUpdate.Parameters.Add("@tid1", SqlDbType.NVarChar).Value = txbteacher1.Text.ToString() 'cmdUpdate.Parameters.Add("@tid2", SqlDbType.NVarChar).Value = txbteacher2.Text.ToString ()

4

1 に答える 1

0

MRABがすでに述べたように、コード全体でこのデータを追跡して、全体を通して文字列として扱われるようにする必要があります。クラステーブルのフィールドは以前はintであったとおっしゃいましたが、これはint変数もコードで使用されている可能性があることを示唆しています(たとえば、SQLコマンドのパラメーター?)。

したがって、デバッガーを使用してステップスルーするか、コードをたどって、データをたどるだけです。デバッガーを使用すると、データに先行ゼロがまだ含まれていることを確認できるため、予期しないことが発生することはありません。

上記が役に立たない場合は、他の誰かが何が起こっているのかを見つけることができるように、質問でより多くのコードを提供する必要があります。

于 2012-08-07T10:59:23.967 に答える