简便的将DataSet导入到数据库中
有时候我们需要经常的将数据集(DataSet)导入到数据库中,可是怎么办呢? 有人就说了,利用Sql语句马上就可以搞定了,对,sql是可以搞定,但是sql的拼接不可以有差错啊,利用SqlParameter可以减少类型的烦恼,可是如果是很多列,那还不累死你。
1、将DataSet导入Access中(OleDbDataAdapter.Update方法 )
OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Jet OLEDB:Engine Type=5");
olecon.Open();
OleDbDataAdapter oda = new OleDbDataAdapter("select * from TableName" , olecon);
DataSet newds = new DataSet();
try
{
OleDbCommandBuilder cmdbld = new OleDbCommandBuilder(oda);
cmdbld.SetAllValues = true;
oda.InsertCommand = cmdbld.GetInsertCommand();
ds.Tables[i].BeginLoadData();
int rowcount = ds.Tables[i].Rows.Count;
for (int n = 0; n < rowcount; n++)
{
ds.Tables[i].Rows[n].SetAdded();
}
ds.Tables[i].EndLoadData();
oda.UpdateBatchSize = 1000;
}
catch
{
}
oda.Update(ds, ds.Tables[i].TableName);
oda.Dispose();
olecon.Close();
olecon.Dispose();
OleDbDataAdapter.Update方法和用Sql拼接插入的效率基本上是一样的,OleDbDataAdapter.Update
其实也是一条一条的插入更新的。但是他可以提高我们程序的稳定性。
2、将DataSet导入到Sql Server中(SqlBulkCopy方法)
SqlConnection conn = new SqlConnection(sqlConnectString);
conn.Open();
SqlBulkCopy sbc = new SqlBulkCopy(conn);
sbc.DestinationTableName = ds.Tables[i].TableName;
//将数据集合和目标服务器的字段对应
for (int q = 0; q < ds.Tables[i].Columns.Count; q++)
{
sbc.ColumnMappings.Add(ds.Tables[i].Columns[q].ColumnName, ds.Tables[i].Columns[q].ColumnName);
}
try
{
sbc.WriteToServer(ds.Tables[i]);
}
catch //(Exception ex)
{
//throw ex;
continue;
}
finally
{
ds.Dispose();
conn.Close();
sbc.Close();
}
这个是不是也比sql insert也好多了,这个效率要比SQL Insert快多了。
比较的弱智,大家见笑了。
说明: 在列名匹配的时候,千万不要加入“[]”这样的字符。容易导致给定的 ColumnName“”与数据源中的任意列均不匹配。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构