现在的位置: 首页 > 综合 > 正文

.NET 批量插入数据,DataSet, SqlDataAdapter.Update

2013年08月21日 ⁄ 综合 ⁄ 共 1961字 ⁄ 字号 评论关闭

在.NET中可以利用SqlDataAdapter类的Update方法批量把数据更新到数据库,这样可以提高写入数据库的工作效率,

减少操作数据频率,减轻数据库压力。

方法的使用详细可以参看MSDN中文 http://technet.microsoft.com/zh-cn/library/system.data.sqlclient.sqldataadapter.aspx

Update方法有5个得载, 下面以Update(DataTable)
做一个简单的例子,往数据库里批量写入数据。

下面是实现在的代码清单:

          //第一步是创建表结构,准备插入到数据库的数据, 可以自己拼,也可以来自查询。
            //如果表数据来自查询,可以把通过DataSet.Tables["表名"].Clone() 方法进行浅拷贝。
            DataTable dt = new DataTable("User");
            dt.Columns.Add("UserId", Type.GetType("System.Int32"));
            dt.Columns.Add("UserName", Type.GetType("System.String"));
            dt.Columns.Add("Password", Type.GetType("System.String"));
            dt.Columns.Add("Sex", Type.GetType("System.Boolean"));
            dt.Columns.Add("Age", Type.GetType("System.Int32"));
            int count = 1000;    //往数据库里插入1000条数据
            DataRow dr = null;
            for (int i = 0; i < count; i++)
            {
                dr = dt.NewRow();
                dr["UserId"] = i;
                dr["UserName"] = "Michael" + i;
                dr["Password"] = "abc123456" + i;
                dr["Sex"] = i / 2 == 0 ? true : false;
                dr["Age"] = 20 + i;
                dt.Rows.Add(dr);    //通过DataTable.Rows.Add(DataRow dr), 添加到DataTable的数据, DataTable.Rows的每一行的数据的RowState 为Added, SqlDataAdapter.Update 方法会把 DataTable 数据行 RowState 为Added 的行批量插入到数据库中,想对RowState有更进一步的了解,可以在网上搜索相关的资料看看,这里不做详细介绍了。
            }
            //数据库连接,可以自定义
           using (SqlConnection conn = new SqlConnection("server=.;database=MyTest;uid=sa;pwd=justdoit"))
           {
               string sql = "INSERT INTO [User] (UserId, UserName, Password, Sex, Age) VALUES (@UserId, @UserName, @Password, @Sex, @Age)";
               SqlCommand cmd = new SqlCommand(sql, conn);
               cmd.Parameters.Add("@UserId", SqlDbType.Int, 8, "UserId");
               cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 20, "UserName");
               cmd.Parameters.Add("@Password", SqlDbType.NVarChar, 50, "Password");
               cmd.Parameters.Add("@Sex", SqlDbType.Bit, 8, "Sex");
               cmd.Parameters.Add("@Age", SqlDbType.Int, 8, "Age");
               SqlDataAdapter adapter = new SqlDataAdapter();
               adapter.InsertCommand = cmd;
               adapter.Update(dt);     //执行指量插入数据
               //假如是使用 Update(DataSet, String), 则先把数据插入到DataSet的DataTable中,再执行批量插入,
               //和 adapter.Update(DataTable) 是一样的原理。
           }

代码清单中已经对代码进行注释了,

DataSet, DataTable相当于数据库、表在内存中的映射,而DataTable中的数据行有一个只读的属性RowState 来标识Row的状态,

执行Update操作时会把RowState为Added的数据批量插入数据库,利用这些特性,就可以很方便,容易,高效的把数据批量插入数据库。

经测试,完全OK。

抱歉!评论已关闭.