0

最近、データ バインディングに関する Plural Sight ASP.NET ビデオを見ていると、<asp:SqlDataSource />.

デフォルトの映画のタイトルとリリース日を SQL Server 2008 データベースの movie テーブルに挿入できない理由がわかりません。この時点まで問題はなく、GridView を介して SelectCommand を介してテーブルにアクセスできましたが、ムービーの挿入ボタンをクリックしても、手動で作成した新しいムービー パラメータがテーブルに追加されません。

見栄えを良くするための私のコードは次のとおりです。

InsertCommand="INSERT INTO movies (title, release_date) VALUES (@title, @release_date)"
SelectCommand="SELECT TOP 30 movie_id, title, release_date FROM movies ORDER BY movie_id DESC"
runat="server" ID="_moviesDataSource" DataSourceMode="DataReader">
<InsertParameters>
    <asp:Parameter Name="title" />
    <asp:Parameter Name="release_date"/>
</InsertParameters>
</asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" Text="Insert new movie" 
    onclick="Button1_Click" /><br /><br />
<asp:GridView ID="_moviesGridInsert" runat="server" DataSourceID="_moviesDataSource">
</asp:GridView>

上記でお気づきかもしれませんが、Parameter asp タグに Type="..." がありませんでしたが、その前に、title の文字列と release_date の dateTime に等しい型がありました。問題は、データベースに設定した値が上記で宣言した値と異なることでしょうか?

それのC#バックエンド:

protected void Button1_Click(object sender, EventArgs e)
{
    Page.MaintainScrollPositionOnPostBack = true;

    // TODO - Insert movie (manually inserted with just user input of button click)
    _moviesDataSource.InsertParameters["title"].DefaultValue = "My movie";
    _moviesDataSource.InsertParameters["release_date"].DefaultValue = "01/01/2008";
    _moviesDataSource.Insert();
}

私はまだ画像を投稿することを許可されていないため、グリッドを追加することはできません。テーブル自体を表示できれば役立つのですが...とにかく、ボタンをクリックすると、テーブルは同じままで、データベースを見ると、新しい値が追加されていません。

4

1 に答える 1

0

SqlDataSourceタグ内またはButton1_Click()メソッド内に何の問題もありませんでした。

問題:

  1. Page.Validate()があったため、フォームに入力するまでページの検証を許可しない検証フォームがありました。グループ IDと設定にすべてのフォーム検証を追加して、これを修正しました: Page.Validate("form1")
  2. 上記を修正した後、テーブル設定 (Visual Studio では SQL Management よりも簡単に実行できます) に移動し、movie_idを auto-increment に設定する必要がありました。この理由は、この値がパラメーターに含まれていなかったため、自動インクリメントしない場合、列のこの値を NULL に設定しようとします (ほとんどの場合、NULL は許可されていないか、私の場合は望ましくありません)。

@Steve Wellens、努力してくれてありがとう!誰かがこの小さなヒントから学べることを願っています!

于 2012-01-19T13:28:57.980 に答える