例如;
现在编了一个服务机器程序已经打开了(装在服务器上),
客户端 没有SQl 是连接的 服务器的数据库!
如果服务器突然掉线,客户端会包错误
请问这个错误,用什么方法可以抓到了!???
请帮忙谢谢`~~~~~
现在编了一个服务机器程序已经打开了(装在服务器上),
客户端 没有SQl 是连接的 服务器的数据库!
如果服务器突然掉线,客户端会包错误
请问这个错误,用什么方法可以抓到了!???
请帮忙谢谢`~~~~~
using System.Data;
using System.Data.SqlClient;
namespace FSSoft.Common.DataBase.SqlserverClient
{
using FSSoft.Common.DataBase.Config;
using FSSoft.Common.TextUtil;
using FSSoft.Common.IO;
/// <summary>
/// Sqlserver數據庫連接操作類。
/// </summary>
public class SQLcon
{
private SqlConnection connection=null;
/// <summary>
/// 取得打開的連接對象。
/// </summary>
public SqlConnection Connection
{
get
{
if(ConOpen())
return connection;
else
throw new Exception(ConfigRead.StrValue(Consts.CONFIG_CON_ERROR_KEY));
}
}
/// <summary>
/// 打開連接。
/// </summary>
/// <returns>true:打開連接成功;false:打開連接失敗。</returns>
public bool ConOpen()
{
try
{
if(connection==null)
{
connection=new SqlConnection();
connection.ConnectionString = DBConfigInfo.SqlserverConnectionString;
}
switch(connection.State)
{
case ConnectionState.Closed:
connection.Open();
break;
case ConnectionState.Broken:
connection.Close();
connection.Open();
break;
}
return true;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
/// <summary>
/// 關閉連接。
/// </summary>
/// <returns>true:關閉連接成功;false:關閉連接失敗。</returns>
public bool ConClose()
{
if(connection==null||connection.State==ConnectionState.Closed)
return true;
try
{
connection.Close();
return true;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
}
/// <summary>
/// 提供數據庫查詢,並把相關的結果集賦予Sys_DS對象或預定義的DataTable對象。
/// </summary>
public class SQLselect:SQLcon
{
private SqlDataAdapter sys_Adapter=null;
private DataSet sys_DS=null;
/// <summary>
/// 查詢適配器對象取得。
/// </summary>
public SqlDataAdapter Sys_Adapter
{
get
{
return sys_Adapter;
}
}
/// <summary>
/// 查詢結果集對象取得。
/// </summary>
public DataSet Sys_DS
{
get
{
return sys_DS;
}
}
/// <summary>
/// 構造函數。
/// </summary>
public SQLselect()
{
sys_DS=new DataSet();
sys_Adapter=new SqlDataAdapter();
sys_Adapter.SelectCommand=new SqlCommand();
sys_Adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
}
/// <summary>
/// 释放资源。
/// </summary>
~SQLselect()
{
sys_Adapter.Dispose();
sys_DS.Dispose();
}
/// <summary>
/// 執行查詢並填充結果集至Sys_DS。
/// </summary>
/// <param name="sql">SQL語句。</param>
/// <param name="tableName">自定義TableName。</param>
public void Fill_DS(String sql,String tableName)
{
FillSQL(sql,tableName);
sys_Adapter.Fill(sys_DS, tableName);
sys_Adapter.SelectCommand.Parameters.Clear();
}
/// <summary>
/// 執行有選擇記錄查詢並填充結果集至Sys_DS。
/// </summary>
/// <param name="sql">SQL語句。</param>
/// <param name="tableName">自定義TableName。</param>
/// <param name="startRecord">記錄開始索引。</param>
/// <param name="maxRecords">記錄條數。</param>
public void Fill_DS(String sql,String tableName,int startRecord,int maxRecords)
{
FillSQL(sql,tableName);
sys_Adapter.Fill(sys_DS,startRecord,maxRecords,tableName);
sys_Adapter.SelectCommand.Parameters.Clear();
}
/// <summary>
/// 需繼承,提供查詢前的準備工作。
/// </summary>
/// <param name="sql">SQL語句。</param>
/// <param name="tableName">自定義TableName。</param>
protected void FillSQL(String sql,String tableName)
{
Console.WriteLine(Consts.CONSOLE_SQL+sql);
sys_Adapter.SelectCommand.CommandText=sql;
sys_Adapter.SelectCommand.Connection=Connection;
if(tableName!=null)
{
if(sys_DS.Tables.Contains(tableName))
{
sys_DS.Tables[tableName].Clear();
}
}
}
}
/// <summary>
/// 提供添加、刪除、修改功能類。
/// </summary>
public sealed class SQLTransaction:SQLcon
{
private SqlCommand sys_command=null;
private SqlTransaction sys_trans=null;
/// <summary>
/// Command對象取得。
/// </summary>
public SqlCommand Sys_command
{
get
{
return sys_command;
}
}
/// <summary>
/// 事務對象取得。
/// </summary>
public SqlTransaction Sys_Trans
{
get
{
return sys_trans;
}
}
/// <summary>
/// 構造函數。
/// </summary>
public SQLTransaction()
{
sys_command=new SqlCommand();
}
/// <summary>
/// 開始事務。
/// </summary>
public void SetSQLBeginTrans()
{
sys_trans = Connection.BeginTransaction();
sys_command.Transaction = sys_trans;
}
/// <summary>
/// 提交事務。
/// </summary>
public void SetSQLCommitTrans()
{
sys_trans.Commit();
}
/// <summary>
/// 回滾事務。
/// </summary>
public void SetSQLRollBack()
{
sys_trans.Rollback();
}
/// <summary>
/// 執行數據操作。
/// </summary>
/// <param name="sql">SQL語句。</param>
/// <returns>返回受影響的數據行數。</returns>
public int Operate(String sql)
{
Console.WriteLine(Consts.CONSOLE_SQL+sql);
sys_command.CommandText = sql;
sys_command.Connection = Connection;
sys_command.CommandType=CommandType.Text;
int OperateCount=sys_command.ExecuteNonQuery();
sys_command.Parameters.Clear();
return OperateCount;
}
}
/// <summary>
/// 提供數據庫高速檢索及存儲過程執行的功能類。
/// </summary>
public sealed class SQLreader:SQLcon
{
private SqlCommand sys_command=null;
private SqlDataReader sys_rdr=null;
/// <summary>
/// Command對象取得。
/// </summary>
public SqlCommand Sys_command
{
get
{
return sys_command;
}
}
/// <summary>
/// DataReader對象取得。
/// </summary>
public SqlDataReader Sys_rdr
{
get
{
return sys_rdr;
}
}
/// <summary>
/// 構造函數。
/// </summary>
public SQLreader()
{
sys_command=new SqlCommand();
}
private void setCommand(String setStr)
{
Console.WriteLine(Consts.CONSOLE_SQL+setStr);
sys_command.CommandText = setStr;
sys_command.Connection = Connection;
sys_command.CommandType=CommandType.Text;
}
private void setProcedureCommand(String ProcedureName)
{
Console.WriteLine(Consts.CONSOLE_PROCE+ProcedureName);
sys_command.CommandText = ProcedureName;
sys_command.Connection = Connection;
sys_command.CommandType=CommandType.StoredProcedure;
}
/// <summary>
/// 執行高速檢索。
/// </summary>
/// <param name="sql">SQL語句。</param>
public void Read_Form(String sql)
{
setCommand(sql);
sys_rdr = sys_command.ExecuteReader();
}
/// <summary>
/// 執行高速檢索(對大型Blob數據比較適用)。
/// </summary>
/// <param name="sql">SQL語句。</param>
public void Read_BlobForm(String sql)
{
setCommand(sql);
sys_rdr = sys_command.ExecuteReader(CommandBehavior.SequentialAccess);
}
/// <summary>
/// 執行存儲過程。
/// </summary>
/// <param name="ProcedureName">存儲過程名稱。</param>
public void Operate_Procedure(String ProcedureName)
{
setProcedureCommand(ProcedureName);
sys_rdr =sys_command.ExecuteReader();
}
/// <summary>
/// 關閉Sys_rdr對象。
/// </summary>
public void CloseReader()
{
sys_command.Parameters.Clear();
if(StringConvert.IsNull(sys_rdr))
return;
if(!sys_rdr.IsClosed)
{
sys_rdr.Close();
}
}
}
}
{
.....
}
catch(System.Exception ex)
{
.....
}
catch
{
}
这样可以捕到很多的错误!!