C#数据集无法更新SQL Server数据库表

时间:2012-03-27 09:52:32

标签: c# sql-server dataadapter sqldataadapter updatecommand

我无法理解我在这里做错了什么。我已经能够使用SQL Server数据库中的数据选择和填充表单,没有任何问题。现在,当我尝试通过修改后的数据集写回数据库时,没有任何反应。显然,更新命令不起作用,我试图找出原因。这是下面的代码。

[我是C#和SQL的新手,所以如果你能像我这样解释,我将非常感激:) :)

编辑:我100%确定它已连接到数据库,检索数据并填充数据集。

    if (!(String.IsNullOrEmpty(Request.QueryString["newsID"])))
    {            

        SqlDataAdapter UpdateNewsSDA = new SqlDataAdapter("SELECT newsID, newsTitle, newsAuthor, newsDate, shortContent, mainContent FROM news_Table WHERE newsID = @newsID", connectObj);
        UpdateNewsSDA.SelectCommand.Parameters.Add("@newsID", SqlDbType.Int).Value = Convert.ToInt32(Request.QueryString["newsID"]);

        UpdateNewsSDA.UpdateCommand = new SqlCommand("UPDATE news_table SET newsTitle=@newsTitle, newsAuthor=@newsAuthor, newsDate=@newsDate, shortContent=@shortContent, mainContent=@mainContent WHERE newsID=@newsID", connectObj);

        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsID", SqlDbType.Int).Value = Convert.ToInt32(Request.QueryString["newsID"]);
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsTitle", SqlDbType.Text).Value = title_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsAuthor", SqlDbType.Text).Value = author_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsDate", SqlDbType.DateTime).Value = Convert.ToDateTime(date_Textbox.Text);
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@shortContent", SqlDbType.Text).Value = shortContent_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@mainContent", SqlDbType.Text).Value = mainContent_Textbox.Text;                       

        DataSet UpdateNewsDS = new DataSet();

        SqlCommandBuilder UpdateNewsCommandBuilder = new SqlCommandBuilder(UpdateNewsSDA);
        UpdateNewsSDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        UpdateNewsSDA.FillSchema(UpdateNewsDS, SchemaType.Source);
        UpdateNewsSDA.Fill(UpdateNewsDS); 

        DataTable UpdateNewsTable = new DataTable();
        UpdateNewsTable = UpdateNewsDS.Tables[0];

        DataRow CurrentDR;

        CurrentDR = UpdateNewsTable.Rows.Find(Convert.ToInt32(Request.QueryString["newsID"]));
        CurrentDR.BeginEdit();
        CurrentDR["newsAuthor"] = "Ron Weasely";
        CurrentDR.AcceptChanges();
        CurrentDR.EndEdit();


        UpdateNewsSDA.Update(UpdateNewsDS);            

    }

编辑2:我发现了问题,下面是整个块!

UpdateNewsSDA.UpdateCommand = new SqlCommand("UPDATE news_table SET newsTitle=@newsTitle, newsAuthor=@newsAuthor, newsDate=@newsDate, shortContent=@shortContent, mainContent=@mainContent WHERE newsID=@newsID", connectObj);

        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsID", SqlDbType.Int).Value = Convert.ToInt32(Request.QueryString["newsID"]);
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsTitle", SqlDbType.Text).Value = title_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsAuthor", SqlDbType.Text).Value = author_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@newsDate", SqlDbType.DateTime).Value = Convert.ToDateTime(date_Textbox.Text);
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@shortContent", SqlDbType.Text).Value = shortContent_Textbox.Text;
        UpdateNewsSDA.UpdateCommand.Parameters.Add("@mainContent", SqlDbType.Text).Value = mainContent_Textbox.Text;

显然,我的更新命令工作但很快被上面代码的文本框的原始内容所取代。

干杯。

1 个答案:

答案 0 :(得分:0)

删除CurrentDR.AcceptChanges();,因为它会将您的DataRow设置为未修改,并且更改不会在数据库中保留。