========數據庫批量導入問題=========

zhuqiang9 2006-09-07 01:07:57
badge1 work_hour
1 25
2 40
k 25 這行類型錯誤
4 26
我想導入一批數據,本來我想如果有一行出錯數據不導入,但執行下面的代碼時,在出錯的行代碼上面的數據刪除了,但是出錯行下面的數據確存入了數據庫,誰可以幫我想想辦法,或是由別的辦法顯現這樣的功能
for(int i=0; i<myDs.Tables[0].Rows.Count; i++)
{
strSql="insert into zhch_nianxiu (badge1,work_hour) values ('"+ myDs.Tables[0].Rows[i].ItemArray[0].ToString() +
"','"+ myDs.Tables[0].Rows[i].ItemArray[1].ToString() +"')";
try
{
myCmd=new OleDbCommand(strSql,conn);
myCmd.ExecuteNonQuery();
}
catch
{
int j=i+2;
Response.Write("<script language='javascript'>alert('第"+ j +"行導入失敗')</script>");
for(int k=0; k<myDs.Tables[0].Rows.Count; k++)
{
if(k!=i)
{
strSql="delete zhch_nianxiu where badge1='"+ myDs.Tables[0].Rows[k].ItemArray[0].ToString() + "'";
myCmd=new OleDbCommand(strSql,conn);
myCmd.ExecuteNonQuery();
}
}
}
...全文
303 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuqiang9 2006-09-07
  • 打赏
  • 举报
回复
問題System.InvalidOperationException: ExecuteNonQuery: Connection property has not been initialized
zhuqiang9 2006-09-07
  • 打赏
  • 举报
回复
OleDbConnection conn =new OleDbConnection(CnnString);
conn.Open ();
OleDbCommand myCmd =new OleDbCommand();
OleDbTransaction myTrans=conn.BeginTransaction();
myCmd.Transaction = myTrans;
try
{
for(int i=0; i<myDs.Tables[0].Rows.Count; i++)
{

myCmd.CommandText= "insert into zhch_nianxiu (badge1,work_hour) values ('"+ myDs.Tables[0].Rows[i].ItemArray[0].ToString() + "','"+ myDs.Tables[0].Rows[i].ItemArray[1].ToString() +"')";
myCmd.ExecuteNonQuery();

}
myTrans.Commit();
try部分怎麼執行不了
zhuqiang9 2006-09-07
  • 打赏
  • 举报
回复
OleDbConnection Conn = new OleDbConnection(ConnString);
Conn.Open();
OleDbCommand cmd=new OleDbCommand(Conn);
OleDbTransaction myTrans=Conn.BeginTransaction();
cmd.Transaction = myTrans;
try
{
for(int i=0;i<循环次数;i++)
{
数据库插入操作
}
myTrans.Commit();
}
catch()
{
myTrans.Rollback()
}
finally
{
关闭数据库
}
但是執行道cmd.Transaction = myTrans;出錯
Object reference not set to an instance of an object. 誰告訴我怎麼回事
cm8983 2006-09-07
  • 打赏
  • 举报
回复
参考下面:
这里可以转为c#:
http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx
--------------------------------------------------------------
Public Sub Execute_SQL(ByVal Q As String) '执行数据库命令
If isConnect() Then
Dim sqlCM As New SqlCommand("", cnn)
Dim sqlTran As SqlTransaction = cnn.BeginTransaction(IsolationLevel.ReadCommitted, "myTran") '定义事务
Try
sqlCM.Transaction = sqlTran '启动事务
sqlCM.CommandText = Q
sqlCM.ExecuteNonQuery()
sqlTran.Commit() '执行事务
Catch ex As Exception
sqlTran.Rollback("myTran") '事务回滚
Show_Msg(ex.Message, errMsg)
Finally
closeDB()
GC.Collect()
End Try
End If
End Sub

xiaomatian 2006-09-07
  • 打赏
  • 举报
回复
转眼都那么多人回复了?呵呵
xiaomatian 2006-09-07
  • 打赏
  • 举报
回复
你把类型错误的行给跳过不就可以了?为什么要用异常来继续下一条呢?如果是类型正确,但是插入数据库出错你也跳过?先检查你的badge1 work_hour的类型是否符合你的要求,然后在统一插入数据库中。
而1楼所说的事务在.net下是很容易的。
OleDbConnection Conn = new OleDbConnection(ConnString);
Conn.Open();
OleDbCommand cmd=new OleDbCommand(Conn);
OleDbTransaction myTrans=Conn.BeginTransaction();
cmd.Transaction = myTrans;
try
{
for(int i=0;i<循环次数;i++)
{
//你的数据库插入操作
}
myTrans.Commit();
}
catch()
{
myTrans.Rollback()
}
finally
{
关闭数据库
}

大体上就这样。随便写了一下。你自己调试一下。
zhuqiang9 2006-09-07
  • 打赏
  • 举报
回复
我的意思是想,有一條數據出錯,就讓他重新全部在導入一次,而不是判斷哪個不正確,有一條數據不對就讓他不能導入
flyzq 2006-09-07
  • 打赏
  • 举报
回复
if(isnum(myDs.Tables[0].Rows[i].ItemArray[0].ToString()))
{
insert....
}

private bool isnum(string s)
{
//判断s是不是数值型
}
zhuqiang9 2006-09-07
  • 打赏
  • 举报
回复
小弟剛接觸數據庫只會一些簡單的插入刪除,不知道上面這位說的怎麼寫
minajo21 2006-09-07
  • 打赏
  • 举报
回复
用事务来做

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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