C#DataTable更新多行

时间:2012-01-13 12:54:33

标签: c# datatable dataset

如何使用数据表进行多次更新?

我发现了这个Update 1 row

我的代码:

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne)
        {
            try
            {
                using (var connectionWrapper = new Connexion())
                {
                    var connectedConnection = connectionWrapper.GetConnected();


                    SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "Emp");
                    DataTable dt = ds.Tables["Emp"];
                    CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne);

                    //Update all lines, it not save in Database
                    foreach (DataRow row in dt.Rows)
                    {
                        row["IS_IMPORT"] = true;
                    }
                }
            }
            catch (Exception excThrown)
            {
                throw new Exception(excThrown.Message);
            }



        }
问题是:

foreach (DataRow row in dt.Rows)
                        {
                            row["IS_IMPORT"] = true;
                        }

它不会将其保存到数据库中。

提前谢谢你, 甜菊

3 个答案:

答案 0 :(得分:4)

首先需要将DataAdapter上的UpdateCommand属性设置为UPDATE语句,该语句将被执行以更新数据库中的行。

然后,在更新DataTable中的值之后,需要将其传递给DataAdapter.Update()。 然后,它将为DataTable中的每个更新行执行UpdateCommand。

参考文献:

MSDN - SqlDataAdapter.Update
MSDN - SqlDataAdapter.UpdateCommand

答案 1 :(得分:3)

您正在更新内存中的值。 DataTable类不是一个sql视图,而是一个内存表示。 Sql Data Adapter仅复制数据。

您必须将更改写回数据库。试试这个:

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne)
    {
        try
        {
            using (var connectionWrapper = new Connexion())
            {
                var connectedConnection = connectionWrapper.GetConnected();


                SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn);

                da.UpdateCommand = connectedConnection.CreateCommand();
                da.UpdateCommand.XXXX = YYYY; // construct the SQL Command                    

                DataSet ds = new DataSet();
                da.Fill(ds, "Emp");
                DataTable dt = ds.Tables["Emp"];
                CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne);

                //Update all lines, it not save in Database
                foreach (DataRow row in dt.Rows)
                {
                    row["IS_IMPORT"] = true;
                }

                da.Update(dt);
            }
        }
        catch (Exception excThrown)
        {
            throw new Exception(excThrown.Message);
        }
    }

这应该有效。

答案 2 :(得分:0)

您必须致电da.Update()