0

最近,我一直在觀察有關數據綁定的Plural Sight ASP.NET視頻,並且我遇到了聲明性數據源控件,如<asp:SqlDataSource />通過SqlDataSource將數據插入到數據庫表中

我無法理解爲什麼我無法將默認電影標題和發佈日期插入到sql server 2008數據庫的電影表中。直到現在我還沒有遇到任何問題,並且已經能夠通過SelectCommand通過gridView訪問表格,但是當我單擊插入電影按鈕時,新的手動製作的電影參數不會添加到表格中。

這裏是我的一個更好的看代碼:在參數標籤ASP

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> 

正如你可以看到上面,我沒有足夠的類型=「...」,而在此之前,我有類型等於release_date的title和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(); 
} 

我不能發表圖片呢,所以添加網格是不可能的,即使它會幫助,如果你能查看錶本身..但無論如何,一旦按鈕被點擊,表格保持不變,當我查看數據庫時,新值不會被添加。

+0

「release_date」]。DefaultValue =「01/01/2008」; 發佈日期真的是一個字符串嗎? –

+0

@SteveWellens release_date類型是DateTime,在用戶控件表單中指定。我相信當你插入參數時,他們都需要用引號。謝謝 –

+0

對,也許這將有助於明確設置類型,例如:SqlDataSource1.SelectParameters [0] .DbType = DbType.Date; –

回答

0

對於SqlDataSource標記或Button1_Click()方法中的任何內容都沒有任何問題。

問題:

  1. 有一個驗證的形式,將不允許頁面驗證,直到形式填寫,因爲我有Page.Validate()。我通過將所有表單驗證添加到組ID和設置:Page.Validate(「form1」)來解決此問題。
  2. 上述問題解決後,我不得不去我的表設置(這可以在Visual Studio然後在SQL管理更容易),並設置movie_id自動增量。原因是這個值不在參數中,所以如果它不自動遞增,它會嘗試將該列的這個值設置爲NULL(並且在大多數情況下,不允許NULL或不是我想要的)。

@Steve Wellens,謝謝你的努力!希望有人能從這個小小的提示中學習!

相關問題