您的位置:首页 > 数据库

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

2012-08-29 11:16 791 查看
在.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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: