【发布时间】:2021-11-05 19:01:32
【问题描述】:
我已经使用 winForm 和 cs 创建了数据上传到 Oracle 服务器的应用程序
但是发生了一些无法理解的事情。
每隔大约 30 分钟,应用程序会显示“ORA-03135”错误消息
所以,我添加代码来检查连接状态并在连接未打开时重新打开
但是在 OracleDataAdapter 中出现“ORA-03135”错误,而不是处于连接状态
我不明白这个错误
下面是我的代码
Winform:
private void comStart()
{
try {
sp = new SerialPort();
sp.PortName = Properties.Settings.Default.comport;
sp.BaudRate = Properties.Settings.Default.baud;
sp.DataBits = Properties.Settings.Default.databits;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.DataReceived += (sender, e) =>
{
dynamoData = dynamoData + sp.ReadExisting();
if (dynamoData.IndexOf(etx) != -1 && dynamoData.IndexOf(stx) != -1)
{
dynamoData = dynamoData.Substring(dynamoData.IndexOf(stx.ToString()) + 1, (dynamoData.IndexOf(etx.ToString()) - (dynamoData.IndexOf(stx.ToString()) + 1) ));
checkData(dynamoData);
dynamoData = null;
}
};
sp.Open();
label79.BackColor = Color.Lime;
}
catch (Exception ec)
{
label79.BackColor = Color.Red;
}
}
private void checkData(string data)
{
sharedDb._db.checkConnection(); //Connection check
string res_data = null;
string snNo = null , rname = null , date = null;
res_data = data;
string[] each_data = res_data.Split(';');
this.Invoke(new MethodInvoker(delegate() {
label13.Text = date = each_data[1];
label18.Text = each_data[2];
rname = dataGridView2.Rows[0].Cells[0].Value.ToString();
label20.Text = snNo = dataGridView2.Rows[0].Cells[0].Value + "R" + each_data[0];
label21.Text = each_data[3];
label84.Text = each_data[4].Split('_')[0];
OK_NG(label62 , each_data[4].Split('_')[1]);
label6.Text = each_data[5].Split('_')[0];
OK_NG(label10, each_data[5].Split('_')[1]);
}));
if (each_data[5].Split('_')[1].Equals("OK") && each_data[3].Equals(dataGridView2.Rows[0].Cells[1].Value.ToString()))
{
int res = sharedDb._db.insertData(res_data , rname , snNo , "0123456789"); //insert comport string Data
if (res == 1) //insert result..
{
insertHistory(snNo , date ); //add history Data
setlabelData( Convert.ToDateTime(date).ToString("yyyy.MM.dd") , snNo);
label75.Text = each_data[0].Split('A')[1].ToString();
}
}else
{
OK_NG(label64, "NG");
}
}
CS(共享数据库):
public static class sharedDb
{
public static db _db = null;
public static void initDB()
{
_db = new db();
}
}
CS(分贝):
class db(){
public void connectdb()
{
connected = true;
orc = new OracleConnection(connect_url);
orc.Open();
setDbAdapter();
}
public void checkConnection()
{
try
{
if (orc.State != ConnectionState.Open)
{
orc.Open();
setDbAdapter();
}
}
catch (OracleException ex)
{
MessageBox.Show("checkConntion Error Message :" + ex.Message);
}
}
private void setDbAdapter()
{
oda = new OracleDataAdapter();
oda.SelectCommand = orc.CreateCommand();
oda.InsertCommand = orc.CreateCommand();
oda.UpdateCommand = orc.CreateCommand();
oda.DeleteCommand = orc.CreateCommand();
}
public int insertData(string data , string rname , string snNo , string cname)
{
int res = 0;
checkConnection();
try
{
string insertQuery = null;
string[] each_data = null;
each_data = data.Split(';');
insertQuery = "insert into FE_DATA values ( null , null , null , null , '" + rname + "','" + cname + "', '" + each_data[1] + "','" + each_data[2] + "', '" + snNo + "','','" + each_data[3] + "',";
for (int i = 4; i < each_data.Length - 2; i++)
{
insertQuery += "'" + each_data[i].Split('_')[0] + "','" + each_data[i].Split('_')[1] + "',";
}
insertQuery = insertQuery + "'" + each_data[17].Split('_')[1] + "')";
oda.InsertCommand.CommandText = insertQuery;
res = oda.InsertCommand.ExecuteNonQuery();
}
catch (OracleException e)
{
MessageBox.Show(e.Message); //'ORA-03135' Error
}
return res;
}
}
【问题讨论】:
-
我认为我的第一个停靠点是看看为什么我的连接打开了 35 分钟!
-
您使用的是哪个版本的 Oracle?报告了此错误的错误
-
Oracle版本是11g ..是什么bug??连接时间对我来说无关紧要,因为我检查连接状态并在连接关闭时重新打开