• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

C#,将DataTable中的数据批量导入到Oracle数据库中

zjq0034 2010-06-03 03:43:06
我尝试着用SQLServer的方法批量导入了一下,但是Update方法不执行,也不报异常,我的代码如下:

private OracleDataAdapter odad;
public static int InsertBatch(DataTable dt, List<OracleType> DbTypeList,string strtable)
{
getConnection();
int count = 0;
string strfields = "";
string strvalues = "";
for (int i = 0; i < dt.Columns.Count; i++)
{
string strfiled = dt.Columns[i].ColumnName;
strfields += strfiled + ",";
strvalues += "@" + strfiled + ",";
}
if (strfields != "")
{
strfields = strfields.Substring(0, strfields.LastIndexOf(","));
strvalues = strvalues.Substring(0, strvalues.LastIndexOf(","));
}

try
{
if (ocon.State != ConnectionState.Open) ocon.Open();
odad = new OracleDataAdapter();
//建立InsertCommand
StringBuilder sb = new StringBuilder("");
sb.Append("INSERT into " + strtable + " (" + strfields + ") VALUES(");
sb.Append(strvalues + ")");
odad.InsertCommand = new OracleCommand();
odad.InsertCommand.CommandText = sb.ToString();
odad.InsertCommand.Connection = ocon;
for (int i = 0; i < dt.Columns.Count; i++)
{
string filed = dt.Columns[i].ColumnName;
string strvalue = "@" + filed;
OracleParameter oparam = new OracleParameter();
oparam.ParameterName = strvalue;
oparam.OracleType = DbTypeList[i];
oparam.SourceVersion = DataRowVersion.Current;
oparam.SourceColumn = filed;
odad.InsertCommand.Parameters.Add(oparam);
}
count = odad.Update(dt);
}
catch (Exception ex)
{
count = 0;
}
finally
{
if (ocon != null)
ocon.Close();
}
return count;
}


方法中的参数List<OracleType> DbTypeList,是与dt中每一列一一对应的
执行到count = odad.Update(dt);的时候没有异常,也并未将数据插入到数据库中,请问各位,怎么才能执行DataTable的批量导入Oracle数据库操作啊?
...全文
957 点赞 收藏 17
写回复
17 条回复
Nevin82 2010年08月31日
ddddddddddddddddddddddddddddddddddddddddddddddd
回复 点赞
赵举飞 2010年06月12日
来看看别人是怎么导入的,学习一下
回复 点赞
柳晛 2010年06月12日
二楼推荐的BulkCopy应该是效率最高的。
回复 点赞
柳晛 2010年06月12日
...
回复 点赞
Ctrl_Alt_Delete 2010年06月12日
帮楼主顶一下了
回复 点赞
zjq0034 2010年06月12日
有比较详细一点的讲解吗?确实没用过OracleBulkCopy,而且我用的是Oracle10g
回复 点赞
zjq0034 2010年06月04日
唉…………贴沉大海了…………
回复 点赞
zjq0034 2010年06月04日
再顶一下吧…………
回复 点赞
zjq0034 2010年06月03日
呃………………oparam.Value…………在SQLServer中貌似不用设置啊…………要怎么设置?循环提取每一个字段的值并赋值吗?
回复 点赞
辰爸 2010年06月03日
楼主好像忘记设置oparam.Value了
回复 点赞
ztj820807 2010年06月03日
是不得用Command.Prepare()
回复 点赞
zjq0034 2010年06月03日
唉…………又沉了…………
回复 点赞
msnadair 2010年06月03日
事务是批量导入的关键
回复 点赞
zjq0034 2010年06月03日
我是走的断点,如果异常的话应该会走catch块的,不过并没有执行catch块…………用的是Oracle10G…………
回复 点赞
辰爸 2010年06月03日
如果是Oracle 11G的话可以引用Oracle.DataAccess.dll中使用OracleBulkCopy批量导入数据,效率很高

catch (Exception ex)
{
count = 0;
}
异常被捕获掉了,你可以去掉之后看是不是报异常
回复 点赞
zjq0034 2010年06月03日
⊙﹏⊙b汗,沉的好快啊,自己顶一下
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告