1. 程式人生 > >基於三層架構下的公共資料訪問方法(Sqlite資料庫)

基於三層架構下的公共資料訪問方法(Sqlite資料庫)

作者總結了一下,使用Winform的三層架構做窗體應用程式,在資料訪問方面,有用到純sql語句方法、引數方法、儲存過程方法。

那麼什麼是三層架構呢?

UI---存放Form窗體---(使用者所關心的)

業務邏輯層----存放業務傳遞(BLL)

資料訪問層----底層的資料處理方法(DAL)

資料公共訪問方法---SqlHelper(DBUtilty)

使用三層架構設計Winform程式,能夠達到”高內聚、低耦合“.團隊分工明確,適用於大型的企業級專案

 

現在我提供一下SQLite資料庫的訪問方法

第一步:配置資料庫。在App.config裡

<connectionStrings>
<add name="sqlite" connectionString="data source=|datadirectory|..\..\Hosptial.db;Pooling=true;FailIfMissing=false" providerName="System.Data.SQLite" />
</connectionStrings>

注意:我把資料庫檔案放在外層了,所以就必須多加【..\..\】,如果放在bin--debug檔案加下就要寫成|datadirectory|Hosptial.db

第二部:連線配置檔案

1.新建一個類SqlHelper.引入名稱空間:using System.Data; using System.Data.Sqlite; using System.Configuration;

2.新增引用:引用--新增引用--勾選System.Configuration

3.連線配置檔案:在類中新增程式碼: private static string conn = ConfigurationManager.ConnectionStrings["sqlite"].ToString();

注意:中括號裡的["___"]名稱必須要與App.Config裡的connectionStrings的name相同,否則會出現異常

4.建立公共方法(錯誤輸出到本地的方法,參照我的另一篇部落格https://www.cnblogs.com/970728-qi/p/9826476.html)

  •  普通資料訪問方法
 
  
  
//1.執行sql語句,並返回受影響的行數,在使用Command向資料庫傳送增、刪、改命令時,通常使用ExecuteNonQuery方法
public static int Update(string sql)
{
SQLiteConnection sqlcon 
= new SQLiteConnection(conn); SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon); try { sqlcon.Open(); return sqlcmd.ExecuteNonQuery(); } catch (Exception e) { PrintError(e.Message);//將錯誤資訊儲存到本地 throw new Exception("呼叫 public static int Update(string sql)方法時出錯" + e.Message); } finally { sqlcon.Close();//關閉練連線 } }
  //2.執行Sql語句,返回結果集的第一行,第一列。通常使用ExecuteScalar方法
        public static object SingResult(string sql)
        {
            SQLiteConnection sqlcon = new SQLiteConnection(conn);
            SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
            try
            {
                sqlcon.Open();
                return sqlcmd.ExecuteScalar();
            }
            catch (Exception e)
            {
                PrintError(e.Message);
                throw new Exception("呼叫public static object SingResult(string  sql)方法時出錯:" + e.Message);
            }
            finally
            {
                sqlcon.Close();
            }
        }
 
  
  
        //3.執行sql語句,生成一個包含資料的SQLiteDataReader物件例項
        public static SQLiteDataReader GetReader(string sql)
        {
            SQLiteConnection sqlcon = new SQLiteConnection(conn);
            SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
            try
            {
                sqlcon.Open();
                return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception e)
            {
                sqlcon.Close();
                PrintError(e.Message);
                throw new Exception("呼叫public static SQLiteDataReader GetReader(string sql)方法時出錯:" + e.Message);
            }
        }
 
  
  
//4.產生dataTable物件     
 public static DataTable GetDataTable(string sql)
        {
            SQLiteConnection sqlcon = new SQLiteConnection(conn);
            SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
            SQLiteDataAdapter da = new SQLiteDataAdapter(sqlcmd);//建立介面卡物件
            DataTable table = new DataTable();
            try
            {
                sqlcon.Open(); 
                da.Fill(table);
                return table;
            }
            catch (Exception e)
            {

                PrintError(e.Message);
                throw new Exception("呼叫public static DataSet GetDataSet(string sql)方法時出錯:" + e.Message);
            }
            finally
            {
                sqlcon.Close();
            }
        }
  •  引數方法
      public static int UpdateParam(string sql, SQLiteParameter[] parameter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.Parameters.AddRange(parameter);
                    return sqlcmd.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    PrintError(e.Message);
                    throw new Exception("呼叫 public static int UpdateParam(string sql, SQLiteParameter[] parameter)方法時出錯" + e.Message);
                }
                finally
                {
                    sqlcon.Close();
                }
            }
    
            public static object SingleResultParam(string sql, SQLiteParameter[] parameter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.Parameters.AddRange(parameter);
                    return sqlcmd.ExecuteScalar();
                }
                catch (Exception e)
                {
                    PrintError(e.Message);
    
                    throw new Exception("呼叫 public static object SingleResultParam(string sql, SQLiteParameter[] parameter)方法時出錯" + e.Message);
                }
                finally
                {
                    sqlcon.Close();
                }
            }
    
            public static SQLiteDataReader GetReaderParam(string sql, SQLiteParameter[] parameter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(sql, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.Parameters.AddRange(parameter);
                    return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception e)
                {
                    sqlcon.Close();
                    PrintError(e.Message);
                    throw new Exception("呼叫public  static SQLiteDataReaderParam GetReader(string sql,SQLiteParameter[] parameter)方法時出錯" + e.Message);
                }
            }
  • 儲存過程方法
          public static int UpdateProce(string spName, SQLiteParameter[] parameter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.CommandType = CommandType.StoredProcedure;
                    sqlcmd.Parameters.AddRange(parameter);
                    return sqlcmd.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    PrintError(e.Message);
                    throw new Exception("呼叫public static int UpdateProce(string spName,SQLiteParameter[] parameter)方法出錯:" + e.Message);
                }
                finally
                {
                    sqlcon.Close();
                }
    
            }
            public static object SingleResultProc(string spName, SQLiteParameter[] paramter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.CommandType = CommandType.StoredProcedure;
                    sqlcmd.Parameters.AddRange(paramter);
                    return sqlcmd.ExecuteScalar();
    
                }
                catch (Exception e)
                {
                    PrintError(e.Message);
                    throw new Exception("呼叫  public static object  SingleResultProc(string spName,SQLiteParameter[] paramter)方法出錯:" + e.Message);
                }
                finally
                {
                    sqlcon.Close();
                }
            }
            public static SQLiteDataReader GetReaderProc(string spName, SQLiteParameter[] parameter)
            {
                SQLiteConnection sqlcon = new SQLiteConnection(conn);
                SQLiteCommand sqlcmd = new SQLiteCommand(spName, sqlcon);
                try
                {
                    sqlcon.Open();
                    sqlcmd.Parameters.AddRange(parameter);
                    sqlcmd.CommandType = CommandType.StoredProcedure;
                    return sqlcmd.ExecuteReader(CommandBehavior.CloseConnection);
    
                }
                catch (Exception e)
                {
                    sqlcon.Close();
                    PrintError(e.Message);
                    throw new Exception("呼叫   public static SQLiteDataReader GetReaderProc(string spName, SQLiteParameter[] parameter)方法出錯:" + e.Message);
                }
    
            }

    因為會寫第一個基本的sqlite語句方法,其他兩種都大致相同。作者就不再贅述了,如有錯誤歡迎指正,如若轉載,請標註出處。