.net ,oracle 如何批量插入数据效率更高?

风沙不去驼铃声 2009-02-18 12:04:58
我有一些数据,来源于文件.
.net读取文件中的数据,数据的条数会有上百条,但是不固定.
如果循环使用 insert 语句添加到oracle数据库,速度会很满.
请教各位高手,给个方法解决.
我是.net,oracle 新手,给断调用过程的代码,将感激不尽.多谢各位.
...全文
552 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppfaq 2009-02-18
  • 打赏
  • 举报
回复
其实楼主可以直接只用SqlBulkInsert来导数据
如果必须用.net code来导入的话,可以参考http://blog.csdn.net/axman/archive/2008/03/20/2200840.aspx
cppfaq 2009-02-18
  • 打赏
  • 举报
回复
建立一个DataTable,然后使用OracleDataAdapter.Update(dt)

不过如果数据只有几百条的话,效率应该不是啥问题吧
liucuiqiang 2009-02-18
  • 打赏
  • 举报
回复
一条一条更新也可以,只要这个链接一直连着,不要插入一条就重新开链接,速度应该不成问题
  • 打赏
  • 举报
回复
忘了一点. 数据来源是个 xml文件
冷月孤峰 2009-02-18
  • 打赏
  • 举报
回复
用4楼的方法
oracle 使用OracleDataAdapter.Update(dt)
sql 使用SqlDataAdapter.Update(dt)
wolf1118baby 2009-02-18
  • 打赏
  • 举报
回复
写存储过程
lovehongyun 2009-02-18
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090217/15/046d1a4a-65db-4eaf-9e00-e6c96071e169.html
看我8楼的回复.

j45kp 2009-02-18
  • 打赏
  • 举报
回复
/// <summary>
/// Excel 导入到数据库
/// </summary>
/// <param name="excelFile"></param>
/// <param name="sheetName"></param>
/// <param name="tableName"></param>
/// <param name="connectionString"></param>
public static void TransferData(string excelFile, string sheetName, string tableName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);

//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", tableName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";

using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
throw ex;
}
}
private static void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
//Response.Write("拷贝完成");//此事件处理函数是在批量导入完成以后进行的。
}
lovehongyun 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 SealedLove 的回复:]
你可以参考下面的文章:
使用SqlBulkCopy类加载其他源数据到SQL表
http://www.cnblogs.com/SealedLove/archive/2008/12/19/1358186.html
[/Quote]

只能应用在sql server上

oracle 使用OracleDataAdapter.Update(dt)插入数据就行了.
SealedLove 2009-02-18
  • 打赏
  • 举报
回复
你可以参考下面的文章:
使用SqlBulkCopy类加载其他源数据到SQL表
http://www.cnblogs.com/SealedLove/archive/2008/12/19/1358186.html

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧