asp.net读取txt文件内容进oracle数据库出错,搞了1天了,求大神指导。
源码如下:
protected void Button1_Click(object sender, EventArgs e)
{ System.IO.StreamReader my = new System.IO.StreamReader("D:/lyzb/UploadFile/a.TXT", System.Text.Encoding.Default);
string line;
while ((line = my.ReadLine()) != null)
{ Response.Write(line + "</br>");
string[] mm = line.Split(',');
Insert(mm);
} my.Close();
}
private void Insert(string[] mm)
{ string haoma = mm[0];
string qian = mm[1];
string shijian = mm[2];
string qudao = mm[3];
OleDbConnection sqlcnn = new OleDbConnection(ConfigurationManager.ConnectionStrings["yflyzpconn"].ConnectionString);
OracleCommand cmd = new OracleCommand("insert into yf_pay(MBNUMBER,PAYVALUE,PAYTIME,PAYCHANNEL)values(@MBNUMBER,@PAYVALUE,@PAYTIME,@PAYCHANNEL)", sqlcnn);
sqlcnn.Open();
cmd.Parameters.AddWithValue("@MBNUMBER", haoma);
cmd.Parameters.AddWithValue("@PAYVALUE", qian);
cmd.Parameters.AddWithValue("@PAYTIME", shijian);
cmd.Parameters.AddWithValue("@PAYCHANNEL", qudao);
cmd.CommandText = cmd;
sqlcnn.Close();
}
到底哪里有错呀。
[解决办法]
1:使用存储过程
string mConn = "Data Source=orcl;User Id=dzzj;Password=dzzj;"; //连接数据库
conn = new OracleConnection(mConn);
try
{
conn.Open();
cmd = new OracleCommand("sp_file_zh",conn);
cmd.CommandType = CommandType.StoredProcedure; //调用的是存储过程
OracleParameter[] parameters ={
new OracleParameter("msg",OracleType.NVarChar,20),
new OracleParameter("c",OracleType.Int32),
new OracleParameter("ref_cursor",OracleType.Cursor)
};
parameters[0].Direction = ParameterDirection.Output;
parameters[1].Direction = ParameterDirection.Output;
parameters[2].Direction = ParameterDirection.Output;
foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
OracleDataAdapter orda = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
orda.Fill(ds);
return ds; //返回结果集
}
catch (Exception e)
{
throw e;
}
2:使用普通语句
private string Login(string uName, string pwd)
{
string mark = "";
string sqlstr = "select * from usr where loginName=:lName and pwd=:lPwd";
OracleConnection orclCon = new OracleConnection(OrclConnection);
OracleCommand Cmd = new OracleCommand(sqlstr, orclCon);
Cmd.Parameters.AddWithValue(":lName", uName);
Cmd.Parameters.AddWithValue(":lPwd", pwd);
orclCon.Open();
OracleDataReader reader = Cmd.ExecuteReader();
if (reader.Read())
{
HttpContext.Current.Session["UserName"] = uName;
mark = "success";
}
else
{
mark = "fail";
}
return mark;
}
[解决办法]
{ string haoma = mm[0];
string qian = mm[1];
string shijian = mm[2];
string qudao = mm[3];
不足四位时会出错
cmd.Parameters.AddWithValue("@MBNUMBER", haoma);
cmd.Parameters.AddWithValue("@PAYVALUE", qian);
cmd.Parameters.AddWithValue("@PAYTIME", shijian);
cmd.Parameters.AddWithValue("@PAYCHANNEL", qudao);
有参数为null是会出错,字符超出字段或类型不匹配时也会出错
[解决办法]
问题有好几个:
1 写了这么多,关键的执行语句缺少:cmd.ExecuteNonQuery()
2 Oracle 的参数应该不是 @XXX 这种的吧。
3 OracleCommand 怎么能和 OleDbConnection 一起用的,这编译能通过吗
4 string[] mm 的数组个数都不判断,就直接用下标[0],[1],不出错才怪