浏览代码

添加数据库重连

章政 7 年之前
父节点
当前提交
5f759bbe51
共有 1 个文件被更改,包括 65 次插入24 次删除
  1. 65 24
      UAS-出货标签管理(泽天)/PublicMethod/DataHelper.cs

+ 65 - 24
UAS-出货标签管理(泽天)/PublicMethod/DataHelper.cs

@@ -53,7 +53,7 @@ namespace UAS_LabelMachine
         //泽天FTP内网
         //泽天FTP内网
         public static readonly string FTPAdress = "ftp://10.2.10.241|uas|Lz201478c";
         public static readonly string FTPAdress = "ftp://10.2.10.241|uas|Lz201478c";
         //Oracle端口
         //Oracle端口
-        public static readonly string OraclePort = "1521";  
+        public static readonly string OraclePort = "1521";
         //需要显示的账套
         //需要显示的账套
         public static readonly string Masters = "ZT_TEST,ZT";
         public static readonly string Masters = "ZT_TEST,ZT";
         //用户选择的数据库的连接字符串
         //用户选择的数据库的连接字符串
@@ -132,34 +132,30 @@ namespace UAS_LabelMachine
             DataTable dt = new DataTable();
             DataTable dt = new DataTable();
             string sql = "select " + Field + " from " + TableName + " where " + Condition;
             string sql = "select " + Field + " from " + TableName + " where " + Condition;
             command = new OracleCommand(sql, connection);
             command = new OracleCommand(sql, connection);
+            Reconnect(command);
             OracleDataAdapter ad = new OracleDataAdapter();
             OracleDataAdapter ad = new OracleDataAdapter();
             ad.SelectCommand = command;
             ad.SelectCommand = command;
             try
             try
             {
             {
                 ad.Fill(dt);
                 ad.Fill(dt);
-                ReconnectTime = 0;
             }
             }
             catch (Exception)
             catch (Exception)
             {
             {
-                if (ReconnectTime == 0)
-                {
-                    ReconnectTime++;
-                    connection = new OracleConnection(DBConnectionString);
-                    //成功执行后将重复连接数置为0
-                    dt = (DataTable)getFieldDataByCondition(TableName, Field, Condition);
-                }
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
             }
             }
-
+            ad.Dispose();
+            command.Dispose();
             if (dt.Rows.Count > 0)
             if (dt.Rows.Count > 0)
             {
             {
-                ad.Dispose();
-                command.Dispose();
                 return dt.Rows[0][0];
                 return dt.Rows[0][0];
             }
             }
             else
             else
             {
             {
-                ad.Dispose();
-                command.Dispose();
                 return "";
                 return "";
             }
             }
         }
         }
@@ -804,6 +800,7 @@ namespace UAS_LabelMachine
         {
         {
             object result = null;
             object result = null;
             command = new OracleCommand(SQL, connection);
             command = new OracleCommand(SQL, connection);
+            Reconnect(command);
             //用来拼接参数的
             //用来拼接参数的
             if (names.Length > 0)
             if (names.Length > 0)
             {
             {
@@ -828,30 +825,65 @@ namespace UAS_LabelMachine
                     }
                     }
                 }
                 }
                 for (int i = 0; i < addpar.Length; i++)
                 for (int i = 0; i < addpar.Length; i++)
-                {
                     command.Parameters.Add(new OracleParameter(addpar[i].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
                     command.Parameters.Add(new OracleParameter(addpar[i].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
-                }
             }
             }
+
             switch (Type.ToUpper())
             switch (Type.ToUpper())
             {
             {
                 case "SELECT":
                 case "SELECT":
-                    result = new DataTable();
                     OracleDataAdapter ad = new OracleDataAdapter(command);
                     OracleDataAdapter ad = new OracleDataAdapter(command);
-                    ad.Fill((DataTable)result);
-                    ad.Dispose();
-                    //成功执行后将重复连接数置为0
+                    result = new DataTable();
+                    try
+                    {
+                        ad.Fill((DataTable)result);
+                    }
+                    catch (Exception)
+                    {
+                        connection = new OracleConnection(DBConnectionString);
+                        connection.Open();
+                        command = new OracleCommand(SQL, connection);
+                        ad = new OracleDataAdapter();
+                        ad.SelectCommand = command;
+                        ad.Fill((DataTable)result);
+                    }
                     break;
                     break;
                 case "DELETE":
                 case "DELETE":
-                    result = command.ExecuteNonQuery();
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
                     break;
                     break;
                 case "UPDATE":
                 case "UPDATE":
-                    result = command.ExecuteNonQuery();
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
                     break;
                     break;
                 case "INSERT":
                 case "INSERT":
-                    command.ExecuteNonQuery();
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
                     break;
                     break;
             }
             }
-
             command.Dispose();
             command.Dispose();
             return result;
             return result;
         }
         }
@@ -1200,5 +1232,14 @@ namespace UAS_LabelMachine
             }
             }
             return param;
             return param;
         }
         }
+
+        private void Reconnect(OracleCommand cmd)
+        {
+            if (cmd.Connection.State == ConnectionState.Closed)
+            {
+                cmd.Connection.Open();
+                LogManager.DoLog("超时重连");
+            }
+        }
     }
     }
 }
 }