一个问题发了200分? 就没人能解决了吗?????高人呢????

醒子宇 2010-05-24 05:04:08
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OracleClient;
using System.Data.OleDb;
using System.Data.Odbc;
using System.IO;


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}



public static DataSet ImportExcel(string file)
{
System.IO.FileInfo fileInfo = new FileInfo(file);
if (!fileInfo.Exists)
return null;

string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";
OleDbConnection objConn = new OleDbConnection(strConn);
DataSet dsExcel = new DataSet();
try
{
objConn.Open();
string strSql = "select * from [Sheet3$]";
OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);
odbcExcelDataAdapter.Fill(dsExcel);
return dsExcel;
}
catch (Exception ex)
{
throw ex;
}
finally
{
objConn.Close();
}
}


private void button4_Click(object sender, EventArgs e)
{
DataSet ds;
OpenFileDialog openFile = new OpenFileDialog();
openFile.Multiselect = false;
openFile.RestoreDirectory = true;
openFile.Filter = "Text files (*.xls)|*.xls|All files (*.*)|*.*";

if (openFile.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFile.FileName;
ds = ImportExcel(openFile.FileName);//获得Excel
}
else
{
return;
}

int odr = 0;

OracleConnection conn = new OracleConnection("Data Source=wzinner;Persist Security Info=True;User ID=common;password=common;Unicode=True"); //获得conn连接


try
{
conn.Open();


string queryString = "insert into em_transferss_t (transfers_id,transfers_OLDLANDNUM) values (:A,:B)";
OracleCommand com = new OracleCommand(queryString, conn);

int dsLength = ds.Tables[0].Rows.Count;// 获得Execle长度

for (int i = 0; i < dsLength; i++)
{
com.Parameters.Add("A", OracleType.Int32).Value = ds.Tables[0].Rows[i][0];

com.Parameters.Add("B", OracleType.VarChar).Value = ds.Tables[0].Rows[i][1];


odr = com.ExecuteNonQuery();//提交



}
conn.Close();


if (odr > 0)
{
MessageBox.Show("成功!");
if (MessageBox.Show("确认要更新吗??", "", MessageBoxButtons.OKCancel) != DialogResult.OK)
{
conn.Open();
int co = 0;
string sql = "delete from em_transferss_t";
OracleCommand comm = new OracleCommand(sql, conn);
co = comm.ExecuteNonQuery();
if (co > 0)
{
MessageBox.Show("数据未上传");
}
}
else
{
conn.Open();
int a = 0;
string updatesql = "update (select/*+ BYPASS_UJVC */ em_transfers_t.TRANSFERS_OLDLANDNUM a1,em_transfers_t.TRANSFERS_ID b1,em_transferss_t.TRANSFERS_OLDLANDNUM a2,em_transferss_t.TRANSFERS_ID b2" +
" from em_transfers_t,em_transferss_t) set a1=a2 where b1 =b2";
OracleCommand commm = new OracleCommand(updatesql, conn);
a = commm.ExecuteNonQuery();
if (a > 0)
{
MessageBox.Show("数据上传成功!");

}
}

}

}
catch (Exception ee)
{
MessageBox.Show(ee.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
conn.Close();
}


}
}
}


每次运行到
co = comm.ExecuteNonQuery();
a = commm.ExecuteNonQuery();

这两句 ,程序未响应了```

零零碎碎 我总共发了3多分了``

求大虾```


感激涕零````
...全文
652 104 打赏 收藏 转发到动态 举报
写回复
用AI写文章
104 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglik 2010-05-27
  • 打赏
  • 举报
回复
顶一下,学习学习
afeng124 2010-05-25
  • 打赏
  • 举报
回复

conn.Open();
string queryString = "insert into transferss_t "+ "(transfers_id,transfers_OLDLANDNUM) values ({0},'{1}')";
OracleCommand com = conn.CreateCommand();
int dsLength = ds.Tables[0].Rows.Count;// 获得Execle长度
for (int i = 0; i < dsLength; i++)
{
queryString = string.Format(queryString,
ds.Tables[0].Rows[0][0],
ds.Tables[0].Rows[0][1]);
com.CommandText = queryString;
odr = com.ExecuteNonQuery();//提交
MessageBox.Show(queryString);
}
conn.Close();

靠山山倒,靠人人倒。细心调试吧。别急。你把MessageBox Show出来的文本放到plsql里运行试试。程序都是调试出来的,大家都没有你的环境,怎么帮你。你要是不会找人远程帮你吧。呵呵
wen98091 2010-05-25
  • 打赏
  • 举报
回复
for循环入库的时候,最好能加个sleep间隔下操作时间。。。。
wen98091 2010-05-25
  • 打赏
  • 举报
回复
调试excel的时候,
是不是先看看任务管理器里是否有execel进程在运行??

如果有excel,最好先提前将那些进程释放掉。
不然再调试的时候会出现锁死的情况。
报些莫名其妙的错误。
wqsuper1985 2010-05-25
  • 打赏
  • 举报
回复
是不是因为数据库锁了啊。。。。。删除操作不能。。。
拿凤姐抵债 2010-05-25
  • 打赏
  • 举报
回复
这个问题可以使用各种方式来逐步排除错误
首先确定是红字的部分出错,
1 是否程序问题
string sql = "delete from em_transferss_t";
OracleCommand comm = new OracleCommand(sql, conn);
co = comm.ExecuteNonQuery();
替换为
string sql = "insert into em_transferss_t (transfers_id,transfers_OLDLANDNUM) values ('-100','-100')";
OracleCommand comm = new OracleCommand(sql, conn);
co = comm.ExecuteNonQuery();
如果执行正常。就是表里面多了个'100','100'的内容。这样就证明程序肯定没有问题。因为Sql语句执行过了。
2 Delete语句出问题
1)替换Sql语句为
string sql = "delete from em_transferss_t where 1=1";
这个比较傻,呵呵。
2)直接把Oracle用户角色修改为DBA。看是否能够删除。
如果这个可以删除,就要查看数据库用户的权利,是不是没有删除的权利。这个网上有。
netlover2008 2010-05-25
  • 打赏
  • 举报
回复
学习中。。。
醒子宇 2010-05-25
  • 打赏
  • 举报
回复
帖子要沉里`````

SOS```

SOS````
qldsrx 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 79 楼 qiushuang1102 的回复:]
当前上下文不存在com`````

引用 77 楼 qldsrx 的回复:
大概就是这么一个模式,省略了部分代码

C# code
//前面省略
using(OracleConnection conn = new OracleConnection("Data Source=wzinner;Persist Security Info=True;User ID=common;passwo……
[/Quote]
不是有这句吗?
using(OracleCommand com = new OracleCommand(queryString, conn))
怎么可能不存在com的定义呢,是不是将com用在下面一对花括号之外了啊,using作用域外是不能再使用该变量的。
deknight 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 62 楼 bbs2241 的回复:]
引用 57 楼 qiushuang1102 的回复:

objConn.Open();
string strSql = "select * from [Sheet3$]";
OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);
odbcExce……


呵呵 我记得当时我在服务器……
[/Quote]
这个说明你的excel没有被释放
GC.Collect();
xiahengzhu 2010-05-25
  • 打赏
  • 举报
回复
看代码是好像没有问题,不过代码写的乱了一些,我的意见就是重写这个功能,反正也很简单的。
jkaty 2010-05-25
  • 打赏
  • 举报
回复
private void button3_Click(object sender, EventArgs e)
4.{
5. DataSet ds;
6. if (openFileDialog1.ShowDialog() == DialogResult.OK)
7. {
8. ds = ImportExcel(this.openFileDialog1.FileName);//获得Excel
9. }
10. else
11. {
12. return;
13. }
14.
15. int odr = 0;
16.
17. OracleConnection conn = dbc.getConnection();//获得conn连接
18.
19. try
20. {
21. conn.Open();
22.
23. OracleCommand cmd = conn.CreateCommand();
24.
25. cmd.CommandText = "INSERT INTO kk.kkhmd (xh,hpzl,hphm,bz,larq,fdjh,clpp,cjh,jdcsyr,cllx,csys) VALUES(:xh,:hpzl,:hphm,:bz,:larq,:fdjh,:clpp,:cjh,:jdcsyr,:cllx,:csys) ";//删除记录
26.
27. int dsLength = ds.Tables[0].Rows.Count;//获得Excel中数据长度
28.
29. for (int i = 1; i < dsLength; i++)
30. {
31. cmd.Parameters.Add("xh", OracleType.VarChar).Value = ds.Tables[0].Rows[i][0];
32. cmd.Parameters.Add("hpzl", OracleType.VarChar).Value = ds.Tables[0].Rows[i][1];
33. cmd.Parameters.Add("hphm", OracleType.VarChar).Value = ds.Tables[0].Rows[i][2];
34. cmd.Parameters.Add("bz", OracleType.VarChar).Value = ds.Tables[0].Rows[i][3];
35. cmd.Parameters.Add("larq", OracleType.DateTime).Value = ds.Tables[0].Rows[i][4];
36. cmd.Parameters.Add("fdjh", OracleType.VarChar).Value = ds.Tables[0].Rows[i][5];
37.
38. cmd.Parameters.Add("clpp", OracleType.VarChar).Value = ds.Tables[0].Rows[i][6];
39. cmd.Parameters.Add("cjh", OracleType.VarChar).Value = ds.Tables[0].Rows[i][7];
40. cmd.Parameters.Add("jdcsyr", OracleType.VarChar).Value = ds.Tables[0].Rows[i][8];
41.
42. cmd.Parameters.Add("cllx", OracleType.VarChar).Value = ds.Tables[0].Rows[i][9];
43. cmd.Parameters.Add("csys", OracleType.VarChar).Value = ds.Tables[0].Rows[i][10];
44.
45. odr = cmd.ExecuteNonQuery();//提交
46. }
47.
48. //如果查到了数据,才使控制分页按钮生效
49. if (odr > 0 )
50. {
51. MessageBox.Show("导入成功");
52. }
53. conn.Close();
54. }
55. catch (Exception ee)
56. {
57. MessageBox.Show(ee.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
58. }
59.
60.}
61.
62.
63.public static DataSet ImportExcel(string file)
64.{
65. FileInfo fileInfo = new FileInfo(file);
66. if (!fileInfo.Exists)
67. return null;
68.
69. string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";
70. OleDbConnection objConn = new OleDbConnection(strConn);
71. DataSet dsExcel = new DataSet();
72. try
73. {
74. objConn.Open();
75. string strSql = "select * from [Sheet1$]";
76. OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);
77. odbcExcelDataAdapter.Fill(dsExcel);
78. return dsExcel;
79. }
80. catch (Exception ex)
81. {
82. throw ex;
83. }
84.}
bobo_包子 2010-05-25
  • 打赏
  • 举报
回复
解决问题方法很重要,就拿你的这个问题来说吧
1.首先你要确定你的OleDbDataAdapter里面取到数据才行。
2.取到数据后才向数据库添加

你首先得解决1
不要一下子全把代码帖出来,论坛里面的人基本都是上班族,不一定有时间看你代码
醒子宇 2010-05-25
  • 打赏
  • 举报
回复
当前上下文不存在com`````[Quote=引用 77 楼 qldsrx 的回复:]
大概就是这么一个模式,省略了部分代码

C# code
//前面省略
using(OracleConnection conn = new OracleConnection("Data Source=wzinner;Persist Security Info=True;User ID=common;password=common;Unicode=True"))
{
try
{
c……
[/Quote]
jkaty 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 74 楼 qiushuang1102 的回复:]
没用哈,昨天有人说了 , 刚刚我又试 了 没用 请问这代码是干嘛的呢?

引用 72 楼 snwvf6688 的回复:
在这行下面odr = com.ExecuteNonQuery();//提交
加上com.Parameters.Clear()试试
[/Quote]

清空参数
qldsrx 2010-05-25
  • 打赏
  • 举报
回复
大概就是这么一个模式,省略了部分代码
//前面省略
using(OracleConnection conn = new OracleConnection("Data Source=wzinner;Persist Security Info=True;User ID=common;password=common;Unicode=True"))
{
try
{
conn.Open();//只要打开,不用关闭,使用了using会自动关闭的。
string queryString = "insert into em_transferss_t(transfers_id,transfers_OLDLANDNUM)values (:A,:B)";
using(OracleCommand com = new OracleCommand(queryString, conn))
{
int dsLength = ds.Tables[0].Rows.Count;// 获得Execle长度
com.Parameters.Add("A", OracleType.Int32);
com.Parameters.Add("B", OracleType.VarChar);

for (int i = 0; i < dsLength; i++)
{
com.Parameters["A"].Value = ds.Tables[0].Rows[i][0];
com.Parameters["B"].Value = ds.Tables[0].Rows[i][1];
odr = com.ExecuteNonQuery();//提交
}
}
if (odr > 0)
{
//省略

}
}
catch (Exception ee)
{
MessageBox.Show(ee.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}






}
bobo_包子 2010-05-25
  • 打赏
  • 举报
回复
这个你要引用excel.dll
bobo_包子 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 64 楼 qiushuang1102 的回复:]

我这是上传成功 如果操作表的时候会没响应``

有别的方法吗引用 62 楼 bbs2241 的回复:
引用 57 楼 qiushuang1102 的回复:

objConn.Open();
string strSql = "select * from [Sheet3$]";
OleDbDataAdapter odbcExcelDataAdapter = new OleDbData……
[/Quote]
你要尝试一行一行的读取,我记得有个函数可以获取到excel表有多少行
你可以尝试这样的做法
Excel.Application xApp=new Excel.ApplicationClass();

xApp.Visible=false;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Excel.Workbook xBook=xApp.Workbooks._Open(fileName,
Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

Excel.Worksheet xSheet=(Excel.Worksheet)xBook.Sheets[1];
//取得行数
int iRowsCount=xSheet.UsedRange.Cells.Rows.Count;
//取得列数
int iColsCount=xSheet.UsedRange.Cells.Columns.Count;



醒子宇 2010-05-25
  • 打赏
  • 举报
回复
没用哈,昨天有人说了 , 刚刚我又试 了 没用 请问这代码是干嘛的呢?[Quote=引用 72 楼 snwvf6688 的回复:]
在这行下面odr = com.ExecuteNonQuery();//提交
加上com.Parameters.Clear()试试
[/Quote]
jkaty 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 69 楼 qiushuang1102 的回复:]
该怎么写代码释放呢 还有command 的``

引用 65 楼 qldsrx 的回复:
以下代码有明显的错误,不知道你怎么能执行不报错:
for (int i = 0; i < dsLength; i++)
{
com.Parameters.Add("A", OracleType.Int32).Value = ds.Tables[0].Rows[i][0];
com.Pa……
[/Quote]

com.Parameters.clear
加载更多回复(83)

110,571

社区成员

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

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

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