我在用datatable更新数据时,明明已经生成了updatecommond串却不能最终导进数据库,各位高手请出手相助!!!
在下感激不尽
代码如下:
public static void test()
        {
            string constr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=";
            using (SqlConnection conn = new SqlConnection(constr))
            {
                SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM mytest", conn);
                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                builder.QuotePrefix = "[";
                builder.QuoteSuffix = "]";
                DataSet table = new DataSet();
                conn.Open();
                adapter.Fill(table, "table");
                PrintValues(table.Tables["table"], "table");
                ///////////////////////////////////////////////////////////////////////////////////////////
                DataColumn column;
                DataTable mytable = new DataTable("temp");
                column = new DataColumn("userid", typeof(System.Int32));
                column.AutoIncrement = true;
                mytable.Columns.Add(column);
                column = new DataColumn("items", typeof(System.String));
                mytable.Columns.Add(column);
                column = new DataColumn("sex", typeof(System.String));
                mytable.Columns.Add(column);
                // Set primary key column.
                //mytable.PrimaryKey = new DataColumn[] {mytable.Columns[0] };
                // Accept changes.
                DataRow row;
                for (int i = 0; i <= 3; i++)
                {
                    row = mytable.NewRow();
                    row["items"] = "Items*" + i;
                    row["sex"] = i + "->" + i;
                    mytable.Rows.Add(row);
                }
                mytable.AcceptChanges();
                PrintValues(mytable, "mytable values");
                mytable.PrimaryKey = new DataColumn[] { mytable.Columns[0] };
                //////////////////////////////////////////////////////////////////////////////////////
                table.Tables["table"].Merge(mytable, false);
                PrintValues(table.Tables["table"], "table1 data (preserve changes)");
                PrintValues(mytable, "mytable values");
                /////////////////////////////////////////////////////////////////////////////////////////
                // Code to modify data in the DataSet here.
                // Without the SqlCommandBuilder, this line would fail.
                table.Tables["table"].AcceptChanges();
                adapter.Update(table, "table");
                Console.Write(builder.GetUpdateCommand().CommandText.ToString());
                conn.Close();
            }
        }

解决方案 »

  1.   

    自己已经OVER!代码共享一下:
      安全提示:腾讯公司提醒您警惕“QQ中奖”骗局。张锐 18:15:03
    public static void test()
            {
                string constr = "Data Source=.;Initial Catalog=test;User ID=sa;Password=";
                using (SqlConnection conn = new SqlConnection(constr))
                {
                    try
                    {
                        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM mytest", conn);
                        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                        builder.QuotePrefix = "[";
                        builder.QuoteSuffix = "]";
                        DataTable thetable = new DataTable();
                        conn.Open();
                        adapter.Fill(thetable);
                        PrintValues(thetable, "the table from database");
                        ///////////////////////////////////////////////////////////////////////////////////////////
                        DataColumn column;
                        DataTable mytable = new DataTable("temp");
                        column = new DataColumn("userid", typeof(System.Int32));
                        column.AutoIncrement = true;
                        mytable.Columns.Add(column);
                        column = new DataColumn("items", typeof(System.String));
                        mytable.Columns.Add(column);
                        column = new DataColumn("sex", typeof(System.String));
                        mytable.Columns.Add(column);
                        DataRow row;
                        for (int i = 0; i <= 3; i++)
                        {
                            row = mytable.NewRow();
                            row["items"] = "Items*" + i;
                            row["sex"] = i + "->" + i;
                            mytable.Rows.Add(row);
                        }
                        mytable.AcceptChanges();
                        PrintValues(mytable, "the table i make");
                        mytable.PrimaryKey = new DataColumn[] { mytable.Columns[0] };
                        DataTable table = thetable.Copy();
                        PrintValues(table, "-------------tabal clone-------------");
                        //////////////////////////////////////////////////////////////////////////////////////
                        table.Merge(mytable, false);
                        PrintValues(table, "-----------the table after merge()----------");
                        for (int item = 0; item < thetable.Rows.Count; item++)
                        {
                            for (int index = 0; index < table.Columns.Count; index++)
                            {
                                thetable.Rows[item][index] = table.Rows[item][index];
                            }
                        }
                        adapter.UpdateCommand = builder.GetUpdateCommand();
                        adapter.DeleteCommand = builder.GetDeleteCommand();
                        adapter.InsertCommand = builder.GetInsertCommand();
                        int num=adapter.Update(thetable);
                        thetable.AcceptChanges();
                        PrintValues(thetable, "            table values                  ");
                        //adapter.Update(table);
                        Console.WriteLine("-----------------------------------");
                       // Console.WriteLine(num);
                        Console.WriteLine("-----------------------------------");
                        Console.Write(builder.GetUpdateCommand().CommandText.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.Write(ex.ToString());
                    }
                    
                }
            }