try
{
if (System.IO.File.Exists(uploadfile.Value.ToString()))
{
string [] filename=uploadfile.Value.ToString().Split(Convert.ToChar("."));
string filetype=filename[filename.Length-1];
if (filetype.ToUpper()!="XLS")
{
lbl_Message.Text="错误:只能录入数据源只能是XLS格式的文件!";
}
else
{
string strConnUpload = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + uploadfile.Value.ToString().Replace("\\", "\\\\") + ";Extended Properties=Excel 8.0";
OleDbConnection connUpload = new OleDbConnection(strConnUpload);
connUpload.Open();
string strSQL = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter daUpload = new OleDbDataAdapter(strSQL,connUpload);
DataSet dsUpload = new DataSet();
daUpload.Fill(dsUpload,"[Sheet1$]");
string strConn="server="++";user="++";password="+;
OracleConnection conn = new OracleConnection(strConn);
conn.Open();
int iSuccess,iFail;
iSuccess=0;
iFail=0;
OracleCommand cmd = new OracleCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "p_henry_arr_process_input";
OracleParameter[] parameters = {
new OracleParameter("pv_AccNbr",OracleType.VarChar,21,ParameterDirection.Input,true,0,0,"",DataRowVersion.Default,Convert.DBNull),
new OracleParameter("pv_MonthTimes",OracleType.VarChar,8,ParameterDirection.Input,true,0,0,"",DataRowVersion.Default,Convert.DBNull),
new OracleParameter("pn_ReturnValue",OracleType.Number,1,ParameterDirection.Output,true,1,0,"",DataRowVersion.Default,Convert.DBNull)
};
for (int iRow=0;iRow<dsUpload.Tables["[Sheet1$]"].Rows.Count; iRow++)
{
parameters[0].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][4]);
parameters[1].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][9]);
cmd.Parameters.Clear();
foreach(OracleParameter parameter in parameters)
cmd.Parameters.Add( parameter );
cmd.ExecuteOracleScalar();
if(Convert.ToInt32(parameters[2].Value)!=0)
{
iSuccess++;
}
else
{
iFail++;
}
}
lbl_Message.Text="成功"+iSuccess+"条,失败"+iFail+"条。";
conn.Close();
connUpload.Close();
lbl_Message.Text="录入成功!";
}
}
}
catch (Exception exc)
{
lbl_Message.Text="错误:录入失败!";
}
上面是C#代码,选择一个EXCEL文件,让每行记录去和Oracle数据库中的匹配,如果不存在返回0。下面是存储过程
create or replace procedure p_henry_arr_process_input(
pv_AccNbr in varchar2,
pv_MonthTimes in varchar2,
pn_ReturnValue out number) is
l_count number;
begin
select count(*) into l_count from arr_process_test
where acc_nbr=pv_AccNbr and month_times=pv_MonthTimes;
pn_ReturnValue:=l_count;
end p_henry_arr_process_input;
不知道哪里错了,总是提示录入失败。
从Excel中取数部分是没有问题的,我已经测试过可以取到数。
15 个解决方案
#1
呵呵,对oracle不熟悉,顶一下
#2
up
#3
可能不是数据库的原因呢,
看看exception.message
看看exception.message
#4
出血本放分,没有知心人呀!
#5
建议同mittee(最后一条大白鲨[无限深情凝视花花版])
查看exc.message
查看exc.message
#6
UP
#7
其实这个问题很简单,是我粗心,忘了cmd.Connection = conn;
那我把这个分转到另一个问题上吧。
Excel文件中,如果单元格格式是文本,我插入一个数的话在单元格的左上角会出现一个绿色的小角,那么当C#中读取文件时它会认为此单元格为null,请问这个问题怎么解决?
文件很大,我不能一个一个的单元格去改格式,而且我必须保证格式是文本,批量修改格式无效。
对了,这个问题只会出现在装了Offcie2003的机器上。2002以下版本都不存在。
那我把这个分转到另一个问题上吧。
Excel文件中,如果单元格格式是文本,我插入一个数的话在单元格的左上角会出现一个绿色的小角,那么当C#中读取文件时它会认为此单元格为null,请问这个问题怎么解决?
文件很大,我不能一个一个的单元格去改格式,而且我必须保证格式是文本,批量修改格式无效。
对了,这个问题只会出现在装了Offcie2003的机器上。2002以下版本都不存在。
#8
楼主不是在耍我们吗,晕倒,不过也算学到点东西,呵呵
#9
for (int iRow=0;iRow<dsUpload.Tables["[Sheet1$]"].Rows.Count; iRow++)
{
parameters[0].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][4]);
parameters[1].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][9]);
cmd.Parameters.Clear();
foreach(OracleParameter parameter in parameters)
cmd.Parameters.Add( parameter );
cmd.ExecuteOracleScalar();
if(Convert.ToInt32(parameters[2].Value)!=0)
{
iSuccess++;
}
else
{
iFail++;
}
}
这一段其实我觉得没必要把parameters.add在每个循环里再添加一次,clear掉了再添加一次这样效率比较低,完全可以在for外面添加。楼主能解释一下吗?
{
parameters[0].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][4]);
parameters[1].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][9]);
cmd.Parameters.Clear();
foreach(OracleParameter parameter in parameters)
cmd.Parameters.Add( parameter );
cmd.ExecuteOracleScalar();
if(Convert.ToInt32(parameters[2].Value)!=0)
{
iSuccess++;
}
else
{
iFail++;
}
}
这一段其实我觉得没必要把parameters.add在每个循环里再添加一次,clear掉了再添加一次这样效率比较低,完全可以在for外面添加。楼主能解释一下吗?
#10
因为我要检查excel中的每一行记录和数据库中的是否匹配,如果条件符合的话就插入到数据库中。
有可能800行的记录只有500行符合条件,我就只要插入这些符合的数据,所以我建了循环。
Airblack(C#疯子) 你也真会开玩笑,当初我的确是没有发现漏了conn.open(),后来发现问题后才后悔用了这么多分提问,呵呵,所以分转移到了第二个问题上,第二个问题我一直没有解决,好象有点难度。
有可能800行的记录只有500行符合条件,我就只要插入这些符合的数据,所以我建了循环。
Airblack(C#疯子) 你也真会开玩笑,当初我的确是没有发现漏了conn.open(),后来发现问题后才后悔用了这么多分提问,呵呵,所以分转移到了第二个问题上,第二个问题我一直没有解决,好象有点难度。
#11
楼主应该单步debug可以测试出问题。
前些天遇到过这个Excel问题,怀疑是Execel的问题,没有找到解决办法。找找有什么补丁
前些天遇到过这个Excel问题,怀疑是Execel的问题,没有找到解决办法。找找有什么补丁
#12
谢谢
#13
沉了
#14
你把错误信息显示出来,一看就知道哪错了.你现在自定义错误不好判断.
#15
结了算了
#1
呵呵,对oracle不熟悉,顶一下
#2
up
#3
可能不是数据库的原因呢,
看看exception.message
看看exception.message
#4
出血本放分,没有知心人呀!
#5
建议同mittee(最后一条大白鲨[无限深情凝视花花版])
查看exc.message
查看exc.message
#6
UP
#7
其实这个问题很简单,是我粗心,忘了cmd.Connection = conn;
那我把这个分转到另一个问题上吧。
Excel文件中,如果单元格格式是文本,我插入一个数的话在单元格的左上角会出现一个绿色的小角,那么当C#中读取文件时它会认为此单元格为null,请问这个问题怎么解决?
文件很大,我不能一个一个的单元格去改格式,而且我必须保证格式是文本,批量修改格式无效。
对了,这个问题只会出现在装了Offcie2003的机器上。2002以下版本都不存在。
那我把这个分转到另一个问题上吧。
Excel文件中,如果单元格格式是文本,我插入一个数的话在单元格的左上角会出现一个绿色的小角,那么当C#中读取文件时它会认为此单元格为null,请问这个问题怎么解决?
文件很大,我不能一个一个的单元格去改格式,而且我必须保证格式是文本,批量修改格式无效。
对了,这个问题只会出现在装了Offcie2003的机器上。2002以下版本都不存在。
#8
楼主不是在耍我们吗,晕倒,不过也算学到点东西,呵呵
#9
for (int iRow=0;iRow<dsUpload.Tables["[Sheet1$]"].Rows.Count; iRow++)
{
parameters[0].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][4]);
parameters[1].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][9]);
cmd.Parameters.Clear();
foreach(OracleParameter parameter in parameters)
cmd.Parameters.Add( parameter );
cmd.ExecuteOracleScalar();
if(Convert.ToInt32(parameters[2].Value)!=0)
{
iSuccess++;
}
else
{
iFail++;
}
}
这一段其实我觉得没必要把parameters.add在每个循环里再添加一次,clear掉了再添加一次这样效率比较低,完全可以在for外面添加。楼主能解释一下吗?
{
parameters[0].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][4]);
parameters[1].Value=Convert.ToString(dsUpload.Tables["[Sheet1$]"].Rows[iRow][9]);
cmd.Parameters.Clear();
foreach(OracleParameter parameter in parameters)
cmd.Parameters.Add( parameter );
cmd.ExecuteOracleScalar();
if(Convert.ToInt32(parameters[2].Value)!=0)
{
iSuccess++;
}
else
{
iFail++;
}
}
这一段其实我觉得没必要把parameters.add在每个循环里再添加一次,clear掉了再添加一次这样效率比较低,完全可以在for外面添加。楼主能解释一下吗?
#10
因为我要检查excel中的每一行记录和数据库中的是否匹配,如果条件符合的话就插入到数据库中。
有可能800行的记录只有500行符合条件,我就只要插入这些符合的数据,所以我建了循环。
Airblack(C#疯子) 你也真会开玩笑,当初我的确是没有发现漏了conn.open(),后来发现问题后才后悔用了这么多分提问,呵呵,所以分转移到了第二个问题上,第二个问题我一直没有解决,好象有点难度。
有可能800行的记录只有500行符合条件,我就只要插入这些符合的数据,所以我建了循环。
Airblack(C#疯子) 你也真会开玩笑,当初我的确是没有发现漏了conn.open(),后来发现问题后才后悔用了这么多分提问,呵呵,所以分转移到了第二个问题上,第二个问题我一直没有解决,好象有点难度。
#11
楼主应该单步debug可以测试出问题。
前些天遇到过这个Excel问题,怀疑是Execel的问题,没有找到解决办法。找找有什么补丁
前些天遇到过这个Excel问题,怀疑是Execel的问题,没有找到解决办法。找找有什么补丁
#12
谢谢
#13
沉了
#14
你把错误信息显示出来,一看就知道哪错了.你现在自定义错误不好判断.
#15
结了算了