none
AddNew()是神马方法? RRS feed

  • 问题

  • 最近被大批量数据插入Access效率问题困扰,找了很多种方法总是无法解决,后来百度了好久发现有说事务+AddNew()方法效率最高,可是我找遍了MSDN只发现有dataview.addNew()方法,请问Addnew()这个是不是VS2010中datatable中的update()呢?

    Addnew()如何使用,请帮忙给个代码参考一下。我是C#初学者。

    2012年5月14日 1:15

答案

全部回复

  • http://msdn.microsoft.com/zh-cn/library/bb220954

    Use the AddNew method to create and add a new record in the Recordset object named by recordset. This method sets the fields to default values, and if no default values are specified, it sets the fields to Null (the default values specified for a table-type Recordset).

    After you modify the new record, use the Update method to save the changes and add the record to the Recordset. No changes occur in the database until you use the Update method.

    大概意思是 addnew 是创建并新增一条记录, 然后看可以通过update 方法来改变 。

    2012年5月14日 1:21
    版主
  • http://msdn.microsoft.com/zh-cn/library/bb220954

    Use the AddNew method to create and add a new record in the Recordset object named by recordset. This method sets the fields to default values, and if no default values are specified, it sets the fields to Null (the default values specified for a table-type Recordset).

    After you modify the new record, use the Update method to save the changes and add the record to the Recordset. No changes occur in the database until you use the Update method.

    大概意思是 addnew 是创建并新增一条记录, 然后看可以通过update 方法来改变 。


    这是vb才有的功能吗?
    2012年5月14日 2:31
  •         private void InsertCommand_Click(object sender, System.EventArgs e)
            {
                string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Northwind.mdb";
    
                OleDbConnection conn = new OleDbConnection(ConnectionString);
    
                DataRow row;
    
                DataSet ds = new DataSet();
    
                try
                {
    
                    conn.Open();
    
    
                    OleDbDataAdapter adapter = new OleDbDataAdapter(
    
                        "SELECT * FROM Customers", conn);
    
    
                    OleDbCommandBuilder cmdBuilder =
                        new OleDbCommandBuilder(adapter);
    
                    adapter.MissingSchemaAction =
                      MissingSchemaAction.AddWithKey;
    
    
                    adapter.Fill(ds, "Customers");
    
    
                    row = ds.Tables["Customers"].NewRow();
    
                    row["CustomerId"] = "001";
    
                    row["ContactName"] = "L";
    
                    row["CompanyName"] = "M";
    
                    ds.Tables["Customers"].Rows.Add(row);
    
    
                    adapter.Update(ds, "Customers");
                    dataGrid1.DataSource = ds.DefaultViewManager;
    
                }
    
                catch (OleDbException exp)
                {
    
                    MessageBox.Show(exp.Message.ToString());
    
                }
    
    
                if (conn.State == ConnectionState.Open)
    
                    conn.Close();
    
    
            }

    这样写也能更新数据库..一次性更新 速度还不错...你试试看

    2012年5月14日 2:48
    版主
  •         private void InsertCommand_Click(object sender, System.EventArgs e)
            {
                string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Northwind.mdb";
    
                OleDbConnection conn = new OleDbConnection(ConnectionString);
    
                DataRow row;
    
                DataSet ds = new DataSet();
    
                try
                {
    
                    conn.Open();
    
    
                    OleDbDataAdapter adapter = new OleDbDataAdapter(
    
                        "SELECT * FROM Customers", conn);
    
    
                    OleDbCommandBuilder cmdBuilder =
                        new OleDbCommandBuilder(adapter);
    
                    adapter.MissingSchemaAction =
                      MissingSchemaAction.AddWithKey;
    
    
                    adapter.Fill(ds, "Customers");
    
    
                    row = ds.Tables["Customers"].NewRow();
    
                    row["CustomerId"] = "001";
    
                    row["ContactName"] = "L";
    
                    row["CompanyName"] = "M";
    
                    ds.Tables["Customers"].Rows.Add(row);
    
    
                    adapter.Update(ds, "Customers");
                    dataGrid1.DataSource = ds.DefaultViewManager;
    
                }
    
                catch (OleDbException exp)
                {
    
                    MessageBox.Show(exp.Message.ToString());
    
                }
    
    
                if (conn.State == ConnectionState.Open)
    
                    conn.Close();
    
    
            }

    这样写也能更新数据库..一次性更新 速度还不错...你试试看

    感谢你的建议,你这个的速度 比我现在用的foreach速度慢些。如果数据量大到30万条的话,一次性插入也有N久。
    • 已编辑 蒙田 2012年5月14日 5:54
    2012年5月14日 4:57
  • 你把数据全部添加到Dataset后 最后执行adapter.Update(ds, "Customers");  这样比原来的慢么?
    2012年5月15日 1:20
    版主
  • 你把数据全部添加到Dataset后 最后执行adapter.Update(ds, "Customers");  这样比原来的慢么?

    相同的行数,你这个用14秒;用foreach只用了9秒。
    2012年5月15日 3:58
  • 最近被大批量数据插入Access效率问题困扰,找了很多种方法总是无法解决,后来百度了好久发现有说事务+AddNew()方法效率最高,可是我找遍了MSDN只发现有dataview.addNew()方法,请问Addnew()这个是不是VS2010中datatable中的update()呢?

    Addnew()如何使用,请帮忙给个代码参考一下。我是C#初学者。

    如果你使用Access的话,而且使用VB.NET,我强烈推荐你创建“查询”(类似SQL中的存储过程)即可。参考我类似的回复:

    http://social.msdn.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/e5a0d14a-7ab5-4b44-ad4c-f95f0d9ec29e

    注意:2003同样操作——增加一个“查询”之后把内容改成insert或者update字符串,用@paraName代替插入的字段内容即可。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月15日 4:43
    版主