通过SqlDataSource将数据插入数据库表

时间:2012-01-18 15:23:56

标签: asp.net sql-server-2008 data-binding sql-insert sqldatasource

最近我一直在观看关于数据绑定的Plural Sight ASP.NET视频,我遇到了<asp:SqlDataSource />等声明性数据源控件。

我无法理解为什么我无法在sql server 2008数据库中的电影表中插入默认电影标题和发布日期。到目前为止我没有遇到任何麻烦,并且能够通过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>

正如您在上面注意到的那样,我在参数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();
}

我还不允许发布图片,所以添加网格是不可能的,即使你可以查看表本身也会有所帮助......但是无论如何,一旦点击按钮,表格就会保留同样,当我查看数据库时,不会添加新值。

1 个答案:

答案 0 :(得分:0)

SqlDataSource 标记内或 Button1_Click()方法中的任何内容都没有任何问题。

问题:

  1. 有一个验证表单在页面填写完毕之前不允许页面验证,因为我有 Page.Validate()。我通过将所有表单验证添加到组ID 并设置: Page.Validate(“form1”)来解决此问题。
  2. 修复上述内容之后,我必须转到我的表设置(可以在Visual Studio上更轻松地在SQL管理中完成)并将 movie_id 设置为自动增量。原因是该值不在参数中,因此如果它不自动递增,它将尝试将该列的值设置为NULL(并且在大多数情况下,不允许NULL或在我的情况下不想要。)
  3. @Steve Wellens,谢谢你的努力!希望有人可以从这个小小的提示中学习!