C# sqlite數據庫操作類

1、引用程序集System.Data.SQLite

2、創建數據訪問基礎類(基於SQLite) DbHelperSqlite

3、創建數據庫操作類DataHelper

4、創建共同函數類CommonHelper

    /// <summary>
    /// 數據訪問基礎類(基於SQLite)
    /// </summary>
    public class DbHelperSqlite
    {
        /// <summary>
        /// 提示信息
        /// </summary>
        public static string StrLastError = string.Empty;

        /// <summary>
        /// 命令
        /// </summary>
        public enum SdaCmd
        {
            /// <summary>
            /// 查詢
            /// </summary>
            Select,

            /// <summary>
            /// 刪除
            /// </summary>
            Delete,

            /// <summary>
            /// 更新
            /// </summary>
            Update,

            /// <summary>
            /// 插入
            /// </summary>
            Insert
        }

        /// <summary>
        /// 連接字符串
        /// </summary>
        /// <value>
        /// The connection string.
        /// </value>
        public static string ConnString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MoviesDemo;Integrated Security=True;";

        /// <summary>
        /// 創建數據庫文件及數據庫表
        /// </summary>
        /// <param name="strDbpath">數據庫文件包含文件名的全路徑信息</param>
        /// <param name="sql">創建數據庫表的SQL語句</param>
        /// <param name="alwaysCreate">if set to <c>true</c> [always create].</param>
        public static void CreateDbTable(string strDbpath, string sql, bool alwaysCreate = false)
        {
            if (!File.Exists(strDbpath) || alwaysCreate)
            {
                //ConnString = $"Data Source={strDbpath};Pooling=false;FailIfMissing=false;syncchronous=normal;";
                SQLiteConnection conn = new SQLiteConnection(ConnString);
                SQLiteCommand cmd = new SQLiteCommand();
                conn.Open();
                cmd.CommandText = sql;
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
                conn.Close();
                FileInfo fileInfo = new FileInfo(strDbpath);
                if (fileInfo.Length == 0)
                {
                    File.Delete(strDbpath);
                    conn = new SQLiteConnection(ConnString);
                    cmd = new SQLiteCommand();
                    conn.Open();
                    cmd.CommandText = sql;
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }
            }
            else
            {
                ConnString = $"Data Source={strDbpath};Pooling=false;FailIfMissing=false;syncchronous=normal;";
            }
        }

        /// <summary>
        /// DataAdapter方法 返回DataSet數據集
        /// </summary>
        /// <param name="sSqlCmd">SQL語句</param>
        /// <param name="command">操作參數 枚舉類型</param>
        /// <param name="tabName">DataSet中的表名</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns></returns>
        public static DataSet DataAdapter(string sSqlCmd, SdaCmd command, string tabName, params SQLiteParameter[] paraList)
        {
            DataSet ds = new DataSet();
            try
            {
                SQLiteConnection con = new SQLiteConnection(ConnString);
                SQLiteCommand cmd = new SQLiteCommand
                {
                    Connection = con,
                    CommandText = sSqlCmd
                };
                if (paraList != null)
                {
                    cmd.CommandType = CommandType.Text;
                    foreach (SQLiteParameter para in paraList)
                    {
                        cmd.Parameters.Add(para);
                    }
                }

                SQLiteDataAdapter sda = new SQLiteDataAdapter();
                switch (command)
                {
                    case SdaCmd.Select:
                        sda.SelectCommand = cmd;
                        break;
                    case SdaCmd.Insert:
                        sda.InsertCommand = cmd;
                        break;
                    case SdaCmd.Update:
                        sda.UpdateCommand = cmd;
                        break;
                    case SdaCmd.Delete:
                        sda.DeleteCommand = cmd;
                        break;
                }

                sda.Fill(ds, tabName);
                con.Close();
                SQLiteConnection.ClearAllPools();
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{sSqlCmd}");
                StrLastError = ex.Message;
            }

            return ds;
        }

        /// <summary>
        /// 執行一個查詢語句,返回一個包含查詢結果的DataTable
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序爲準</param>
        /// <returns></returns>
        public static DataTable ExecuteDataTable(string strSql, SQLiteParameter[] parameters)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand command = new SQLiteCommand(strSql, connection))
                    {
                        if (parameters != null)
                        {
                            command.Parameters.AddRange(parameters);
                        }

                        SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                        DataTable data = new DataTable();
                        adapter.Fill(data);
                        SQLiteConnection.ClearAllPools();
                        return data;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 執行一個查詢語句,返回一個包含查詢結果的DataTable
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <returns></returns>
        public static DataTable ExecuteDataTable(string strSql)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand command = new SQLiteCommand(strSql, connection))
                    {
                        SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                        DataTable data = new DataTable("ResultData");
                        adapter.Fill(data);
                        SQLiteConnection.ClearAllPools();
                        return data;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 對SQLite數據庫執行增刪改操作,返回受影響的行數。
        /// </summary>
        /// <param name="strSql">要執行的增刪改的SQL語句</param>
        /// <param name="parameters">&gt;執行增刪改語句所需要的參數,參數必須以它們在SQL語句中的順序爲準</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string strSql, SQLiteParameter[] parameters)
        {
            try
            {
                int affectedRows;
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    connection.Open();
                    using (DbTransaction transaction = connection.BeginTransaction())
                    {
                        using (SQLiteCommand command = new SQLiteCommand(connection))
                        {
                            command.CommandText = strSql;
                            if (parameters != null && parameters.Length > 0)
                            {
                                command.Parameters.AddRange(parameters);
                            }

                            affectedRows = command.ExecuteNonQuery();
                        }

                        transaction.Commit();
                    }
                }

                SQLiteConnection.ClearAllPools();
                return affectedRows;
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return 0;
            }
        }

        /// <summary>
        /// 對SQLite數據庫執行增刪改操作,返回受影響的行數。
        /// </summary>
        /// <param name="strSql">要執行的增刪改的SQL語句</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string strSql)
        {
            try
            {
                int affectedRows;
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    connection.Open();
                    using (DbTransaction transaction = connection.BeginTransaction())
                    {
                        using (SQLiteCommand command = new SQLiteCommand(connection))
                        {
                            command.CommandText = strSql;
                            affectedRows = command.ExecuteNonQuery();
                        }

                        transaction.Commit();
                    }
                }

                SQLiteConnection.ClearAllPools();
                return affectedRows;
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return 0;
            }
        }

        /// <summary>
        /// 執行一個查詢語句,返回一個關聯的SQLiteDataReader實例
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序爲準</param>
        /// <returns></returns>
        public static SQLiteDataReader ExecuteReader(string strSql, SQLiteParameter[] parameters)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    SQLiteCommand command = new SQLiteCommand(strSql, connection);
                    if (parameters != null)
                    {
                        command.Parameters.AddRange(parameters);
                    }

                    connection.Open();
                    return command.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 執行一個查詢語句,返回一個關聯的SQLiteDataReader實例
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <returns></returns>
        public static SQLiteDataReader ExecuteReader(string strSql)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    SQLiteCommand command = new SQLiteCommand(strSql, connection);
                    connection.Open();
                    return command.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 執行一個查詢語句,返回查詢結果的第一行第一列
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <param name="parameters">執行SQL查詢語句所需要的參數,參數必須以它們在SQL語句中的順序爲準</param>
        /// <returns></returns>
        public static object ExecuteScalar(string strSql, SQLiteParameter[] parameters)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand command = new SQLiteCommand(strSql, connection))
                    {
                        if (parameters != null)
                        {
                            command.Parameters.AddRange(parameters);
                        }

                        SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                        DataTable data = new DataTable();
                        adapter.Fill(data);
                        SQLiteConnection.ClearAllPools();
                        return data;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 執行一個查詢語句,返回查詢結果的第一行第一列
        /// </summary>
        /// <param name="strSql">要執行的查詢語句</param>
        /// <returns></returns>
        public static object ExecuteScalar(string strSql)
        {
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand command = new SQLiteCommand(strSql, connection))
                    {
                        SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                        DataTable data = new DataTable();
                        adapter.Fill(data);
                        SQLiteConnection.ClearAllPools();
                        return data;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return null;
            }
        }

        /// <summary>
        /// 執行多條SQL語句,實現數據庫事務。
        /// </summary>
        /// <param name="sqlStringList">SQL語句的哈希表(key爲strSql語句,value是該語句的SQLiteParameter[])</param>
        /// <returns></returns>
        public static bool ExecuteSqlTran(Hashtable sqlStringList)
        {
            SQLiteConnection conn = new SQLiteConnection(ConnString);
            conn.Open();
            using (SQLiteTransaction trans = conn.BeginTransaction())
            {
                SQLiteCommand cmd = new SQLiteCommand();
                try
                {
                    foreach (DictionaryEntry myDe in sqlStringList)
                    {
                        string cmdText = myDe.Key.ToString();
                        SQLiteParameter[] cmdParms = (SQLiteParameter[])myDe.Value;
                        PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                        cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                    }

                    trans.Commit();
                    return true;
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    StrLastError = ex.Message;
                    LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{sqlStringList}");
                    return false;
                }
                finally
                {
                    conn.Close();
                }
            }
        }

        /// <summary>
        /// 執行壓縮數據庫
        /// </summary>
        public static void ExecuteZip()
        {
            using (SQLiteConnection connection = new SQLiteConnection(ConnString))
            {
                using (SQLiteCommand cmd = new SQLiteCommand("VACUUM", connection))
                {
                    try
                    {
                        connection.Open();
                        cmd.ExecuteNonQuery();
                    }
                    catch (SQLiteException e)
                    {
                        connection.Close();
                        StrLastError = e.Message;
                    }
                }
            }
        }

        /// <summary>
        /// 取dataset
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <returns>
        /// 返回dataset
        /// </returns>
        public static DataSet GetDataSet(string strSql)
        {
            DataSet ds = null;
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(strSql, connection))
                    {
                        try
                        {
                            SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd);
                            ds = new DataSet();
                            dao.Fill(ds);
                            connection.Close();
                        }
                        catch (SQLiteException e)
                        {
                            connection.Close();
                            StrLastError = e.Message;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                StrLastError = ex.Message;
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
            }
            finally
            {
                SQLiteConnection.ClearAllPools();
            }

            return ds;
        }

        /// <summary>
        /// 取dataset
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns>
        /// 返回dataset
        /// </returns>
        public static DataSet GetDataSet(string strSql, params SQLiteParameter[] paraList)
        {
            DataSet ds = null;
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(strSql, connection))
                    {
                        try
                        {
                            if (paraList != null && paraList.Length > 0)
                            {
                                cmd.Parameters.AddRange(paraList);
                            }

                            SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd);
                            ds = new DataSet();
                            dao.Fill(ds);
                            connection.Close();
                        }
                        catch (SQLiteException e)
                        {
                            connection.Close();
                            StrLastError = e.Message;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
            }
            finally
            {
                SQLiteConnection.ClearAllPools();
            }

            return ds;
        }

        /// <summary>
        /// 取datatable
        /// </summary>
        /// <param name="strSql">SQL語句</param>
        /// <returns>
        /// 返回DataTable
        /// </returns>
        public static DataTable GetDataTable(string strSql)
        {
            DataTable dt = null;
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(strSql, connection))
                    {
                        try
                        {
                            SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd);
                            dt = new DataTable();
                            dao.Fill(dt);
                            connection.Close();
                        }
                        catch (SQLiteException e)
                        {
                            connection.Close();
                            StrLastError = e.Message;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
            }
            finally
            {
                SQLiteConnection.ClearAllPools();
            }

            return dt;
        }

        /// <summary>
        /// 取datatable
        /// </summary>
        /// <param name="strSql">SQL語句</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns>
        /// 返回DataTable
        /// </returns>
        public static DataTable GetDataTable(string strSql, params SQLiteParameter[] paraList)
        {
            DataTable dt = null;
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(strSql, connection))
                    {
                        try
                        {
                            if (paraList != null && paraList.Length > 0)
                            {
                                cmd.Parameters.AddRange(paraList);
                            }

                            SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd);
                            dt = new DataTable();
                            dao.Fill(dt);
                            connection.Close();
                        }
                        catch (SQLiteException e)
                        {
                            connection.Close();
                            StrLastError = e.Message;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
            }
            finally
            {
                SQLiteConnection.ClearAllPools();
            }

            return dt;
        }

        /// <summary>
        /// 取最大的ID
        /// </summary>
        /// <param name="sKeyField">字段</param>
        /// <param name="sTableName">表名</param>
        /// <returns></returns>
        public static int GetMaxId(string sKeyField, string sTableName)
        {
            DataTable dt = GetDataTable("select ifnull(max([" + sKeyField + "]),0) as MaxID from [" + sTableName + "]");
            if (dt != null && dt.Rows.Count > 0)
            {
                return Convert.ToInt32(dt.Rows[0][0].ToString());
            }

            return 0;
        }

        /// <summary>
        /// 取最大的ID
        /// </summary>
        /// <param name="sKeyField">字段</param>
        /// <param name="sTableName">表名</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns></returns>
        public static int GetMaxId(string sKeyField, string sTableName, params SQLiteParameter[] paraList)
        {
            DataTable dt = GetDataTable("select ifnull(max([" + sKeyField + "]),0) as MaxID from [" + sTableName + "]",
                paraList);
            if (dt != null && dt.Rows.Count > 0)
            {
                return Convert.ToInt32(dt.Rows[0][0].ToString());
            }

            return 0;
        }

        /// <summary>
        /// 查詢數據庫中的所有數據類型信息
        /// </summary>
        /// <returns></returns>
        public static DataTable GetSchema()
        {
            using (SQLiteConnection connection = new SQLiteConnection(ConnString))
            {
                connection.Open();
                DataTable data = connection.GetSchema("TABLES");
                connection.Close();
                SQLiteConnection.ClearAllPools();
                return data;
            }
        }

        /// <summary>
        /// 取某個單一的元素
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns>
        /// 返回dataset的第一行第一列的元素
        /// </returns>
        public static object GetSingle(string strSql, params SQLiteParameter[] paraList)
        {
            DataTable dt = GetDataTable(strSql, paraList);
            if (dt != null && dt.Rows.Count > 0)
            {
                return dt.Rows[0][0];
            }

            return null;
        }

        /// <summary>
        /// 取某個單一的元素
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <returns>
        /// 返回dataset的第一行第一列的元素
        /// </returns>
        public static object GetSingle(string strSql)
        {
            DataTable dt = GetDataTable(strSql);
            if (dt != null && dt.Rows.Count > 0)
            {
                return dt.Rows[0][0];
            }

            return null;
        }

        /// <summary>
        /// 判斷是否存在
        /// </summary>
        /// <param name="strSql">SQL</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns>
        ///   <c>true</c> if the specified string SQL is exist; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsExist(string strSql, params SQLiteParameter[] paraList)
        {
            DataTable dt;
            try
            {
                using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                {
                    SQLiteCommand cmd = new SQLiteCommand
                    {
                        CommandText = strSql
                    };
                    if (paraList != null && paraList.Length > 0)
                    {
                        cmd.Parameters.AddRange(paraList);
                    }

                    cmd.Connection = connection;
                    SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd);
                    dt = new DataTable();
                    dao.Fill(dt);
                    connection.Close();
                    SQLiteConnection.ClearAllPools();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                StrLastError = ex.Message;
                return false;
            }

            if (dt.Rows.Count > 0)
            {
                if (Convert.ToInt32(dt.Rows[0][0]) > 0)
                {
                    return true;
                }
            }

            return false;
        }

        /// <summary>
        /// 執行insert,update,delete 動作,也可以使用事務
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <param name="bUseTransaction">是否使用事務,默認不使用事務</param>
        /// <returns></returns>
        public static bool UpdateData(string strSql, bool bUseTransaction)
        {
            int iResult;
            if (!bUseTransaction)
            {
                try
                {
                    using (SQLiteConnection connection = new SQLiteConnection(ConnString))
                    {
                        SQLiteCommand comm = new SQLiteCommand(connection)
                        {
                            CommandText = strSql
                        };
                        iResult = comm.ExecuteNonQuery();
                        connection.Close();
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                    StrLastError = ex.Message;
                    iResult = -1;
                }
            }
            else // 使用事務 
            {
                SQLiteConnection conn = new SQLiteConnection(ConnString);
                conn.Open();
                DbTransaction trans = conn.BeginTransaction();
                try
                {
                    SQLiteCommand comm = new SQLiteCommand(conn)
                    {
                        CommandText = strSql
                    };
                    iResult = comm.ExecuteNonQuery();
                    trans.Commit();
                    conn.Close();
                }

                catch (Exception ex)
                {
                    LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                    iResult = -1;
                    trans.Rollback();
                    StrLastError = ex.Message;
                }
            }

            SQLiteConnection.ClearAllPools();
            return iResult > 0;
        }

        /// <summary>
        /// 執行insert,update,delete 動作,也可以使用事務
        /// </summary>
        /// <param name="strSql">strSql語句</param>
        /// <param name="bUseTransaction">是否使用事務,默認不使用事務</param>
        /// <param name="paraList">命令參數集合</param>
        /// <returns></returns>
        public static bool UpdateData(string strSql, bool bUseTransaction, params SQLiteParameter[] paraList)
        {
            int iResult;
            if (!bUseTransaction)
            {
                try
                {
                    SQLiteConnection conn = new SQLiteConnection(ConnString);
                    conn.Open();
                    SQLiteCommand cmd = new SQLiteCommand(conn)
                    {
                        CommandText = strSql
                    };
                    if (paraList != null && paraList.Length > 0)
                    {
                        cmd.Parameters.AddRange(paraList);
                    }

                    iResult = cmd.ExecuteNonQuery();
                    conn.Close();
                }
                catch (Exception ex)
                {
                    LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                    iResult = -1;
                    StrLastError = ex.Message;
                }
            }

            else // 使用事務 
            {
                SQLiteConnection conn = new SQLiteConnection(ConnString);
                conn.Open();
                DbTransaction trans = conn.BeginTransaction();
                try
                {
                    SQLiteCommand cmd = new SQLiteCommand(conn)
                    {
                        CommandText = strSql
                    };
                    if (paraList != null && paraList.Length > 0)
                    {
                        cmd.Parameters.AddRange(paraList);
                    }

                    iResult = cmd.ExecuteNonQuery();
                    trans.Commit();
                    conn.Close();
                }

                catch (Exception ex)
                {
                    LogHelper.Error($"執行sql輸出錯誤:{ex.Message}\r\nSql語句:{strSql}");
                    iResult = -1;
                    trans.Rollback();
                    StrLastError = ex.Message;
                }
            }

            SQLiteConnection.ClearAllPools();
            return iResult > 0;
        }

        /// <summary>
        /// Prepares the command.
        /// </summary>
        /// <param name="cmd">The command.</param>
        /// <param name="conn">The connection.</param>
        /// <param name="trans">The trans.</param>
        /// <param name="cmdText">The command text.</param>
        /// <param name="cmdParms">The command parms.</param>
        public static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, string cmdText, SQLiteParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }

            cmd.CommandType = CommandType.Text;
            if (cmdParms != null)
            {
                foreach (SQLiteParameter parm in cmdParms)
                {
                    cmd.Parameters.Add(parm);
                }
            }
        }

        /// <summary>
        /// Existses the specified string SQL.
        /// </summary>
        /// <param name="strSql">The string SQL.</param>
        /// <returns></returns>
        public static bool Exists(string strSql)
        {
            object obj = GetSingle(strSql);
            int cmdresult;
            if (Equals(obj, null) || Equals(obj, DBNull.Value))
            {
                cmdresult = 0;
            }
            else
            {
                cmdresult = int.Parse(obj.ToString());
            }

            if (cmdresult == 0)
            {
                return false;
            }

            return true;
        }

        /// <summary>
        /// Existses the specified string SQL.
        /// </summary>
        /// <param name="strSql">The string SQL.</param>
        /// <param name="cmdParms">The command parms.</param>
        /// <returns></returns>
        public static bool Exists(string strSql, params SQLiteParameter[] cmdParms)
        {
            object obj = GetSingle(strSql, cmdParms);
            int cmdresult;
            if (Equals(obj, null) || Equals(obj, DBNull.Value))
            {
                cmdresult = 0;
            }
            else
            {
                cmdresult = int.Parse(obj.ToString());
            }

            if (cmdresult == 0)
            {
                return false;
            }

            return true;
        }

        /// <summary>
        /// Adds the column.
        /// </summary>
        /// <param name="tableName">Name of the table.</param>
        /// <param name="columnName">Name of the column.</param>
        /// <param name="dataType">Type of the data.</param>
        /// <returns></returns>
        public static bool AddColumn(string tableName, string columnName, string dataType)
        {
            string pragmaSql = $"PRAGMA table_info(\"{tableName}\")";
            DataSet ds = GetDataSet(pragmaSql);
            List<string> nameList = new List<string>();
            if (!Equals(ds, null) && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dataRow in ds.Tables[0].Rows)
                {
                    if (dataRow["name"] != null)
                    {
                        nameList.Add(dataRow["name"].ToString());
                    }
                }
            }

            if (!nameList.Contains(columnName))
            {
                string alterSql = $"ALTER TABLE {tableName} ADD {columnName} {dataType}";
                int iResult = ExecuteNonQuery(alterSql);
                return iResult > 0;
            }

            return true;
        }

        /// <summary>
        /// Exists the column.
        /// </summary>
        /// <param name="fieldname">The fieldname.</param>
        /// <returns></returns>
        public static bool ExistColumn(string fieldname)
        {
            string sql = $"select * from sqlite_master where name='tablename' and sql like '%{fieldname}%'; ";
            DataTable dataTable = ExecuteDataTable(sql);
            if (!dataTable.Equals(null))
            {
                return dataTable.Rows.Count > 0;
            }

            return false;
        }
        /// <summary>
        /// Exists the column.
        /// </summary>
        /// <param name="fieldname">The fieldname.</param>
        /// <returns></returns>
        public static bool ExistColumn(string tablename, string fieldname)
        {
            string sql = $"select * from sqlite_master where name='{tablename}' and sql like '%{fieldname}%'; ";
            DataTable dataTable = ExecuteDataTable(sql);
            if (!dataTable.Equals(null))
            {
                return dataTable.Rows.Count > 0;
            }
            return false;
        }
        /// <summary>
        /// Adds the colum.
        /// </summary>
        /// <param name="tabel">The tabel.</param>
        /// <param name="column">The column.</param>
        /// <param name="type">The type.</param>
        /// <returns></returns>
        public static bool AddColum(string tabel, string column, string type)
        {
            string sql = $"ALTER TABLE {tabel} ADD {column} {type};";
            return ExecuteNonQuery(sql) > 0;
        }
    }

----------------------------------------------------------------------------------------------------------------------------------------------

    /// <summary>
    /// 數據庫操作類
    /// </summary>
    public partial class DataHelper
    {
       static string _createTableStudent = "CREATE TABLE [student]([id] NVARCHAR(50) PRIMARY KEY,[name] NVARCHAR(50)," +
        "[sex] INT DEFAULT 男, [age] INT DEFAULT 30, [dept] NVARCHAR(50));";

        /// <summary>
        /// Initializes static members of the <see cref="Client.Data.DataHelper"/> class.
        /// </summary>
        static DataHelper()
        {
            try
            {
                string strDbSql = _createTableStudent;
                DbHelperSqlite.CreateDbTable(CommonHelper.GetFilePathAtCurrentDirectory("CoreData.dll"), strDbSql);
                if (!DbHelperSqlite.ExistColumn("student", "score"))
                {
                    DbHelperSqlite.AddColum("student", "score", "INT");
                }
            }
            catch (Exception exception)
            {
                LogHelper.Error("創建數據文件出現錯誤:" + exception.Message);
            }
        }

        /// <summary>
        /// 是否存在該記錄
        /// </summary>
        public static bool ExistsStudent()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select count(1) from student");
            return DbHelperSqlite.Exists(strSql.ToString(), null);
        }

        /// <summary>
        /// 增加一條數據
        /// </summary>
        public static bool InsertStudent(Student model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into student(");
            strSql.Append("name,sex,age,dept,score)");
            strSql.Append(" values (");
            strSql.Append("@Name,@Sex,@Age,@Dept,@Score)");
            SQLiteParameter[] parameters = {
                new SQLiteParameter("@Name", DbType.String,4),
                new SQLiteParameter("@Sex", DbType.Int32,4),
                new SQLiteParameter("@Age", DbType.String,4),
                new SQLiteParameter("@Dept", DbType.String,4),
                new SQLiteParameter("@Score", DbType.Decimal)
            };
            parameters[0].Value = model.Name;
            parameters[1].Value = model.Age;
            parameters[2].Value = model.Sex;
            parameters[3].Value = model.Dept;
            parameters[4].Value = model.Score;

            int rows = DbHelperSqlite.ExecuteNonQuery(strSql.ToString(), parameters);
            return rows > 0;
        }

        /// <summary>
        /// 更新一條數據
        /// </summary>
        public static bool UpdateStudent(Student model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update config set ");
            strSql.Append("Name=@Name,");
            strSql.Append("Age=@Age,");
            strSql.Append("Sex=@Sex,");
            strSql.Append("Dept=@Dept,");
            strSql.Append("Score=@Score,");
            SQLiteParameter[] parameters = {
                new SQLiteParameter("@Name", DbType.String,4),
                new SQLiteParameter("@Age", DbType.Int32,4),
                new SQLiteParameter("@Sex", DbType.String,4),
                new SQLiteParameter("@Dept", DbType.String,4),
                new SQLiteParameter("@Score", DbType.Decimal)
            };
            parameters[0].Value = model.Name;
            parameters[1].Value = model.Age;
            parameters[2].Value = model.Sex;
            parameters[3].Value = model.Dept;
            parameters[4].Value = model.Score;

            int rows = DbHelperSqlite.ExecuteNonQuery(strSql.ToString(), parameters);
            return rows > 0;
        }

        /// <summary>
        /// 得到一個對象實體
        /// </summary>
        public static Student GetModelStudent()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select name,sex,age,dept,score from student ");
            DataSet ds = DbHelperSqlite.GetDataSet(strSql.ToString(), null);
            return ds.Tables[0].Rows.Count > 0 ? DataRowToModelStudent(ds.Tables[0].Rows[0]) : new Student();
        }

        /// <summary>
        /// 得到一個對象實體
        /// </summary>
        public static Student DataRowToModelStudent(DataRow row)
        {
            Student model = new Student();
            if (row != null)
            {
                if (row["name"] != null && row["name"].ToString() != "")
                {
                    model.Name = row["name"].ToString();
                }
                if (row["sex"] != null && row["sex"].ToString() != "")
                {
                    model.Sex = row["sex"].ToString();
                }
                if (row["age"] != null && row["age"].ToString() != "")
                {
                    model.Age = int.Parse(row["age"].ToString());
                }
                if (row["dept"] != null && row["dept"].ToString() != "")
                {
                    model.Dept = row["dept"].ToString();
                }
                if (row["score"] != null)
                {
                    model.Score = decimal.Parse(row["score"].ToString());
                }
            }
            return model;
        }
    }

----------------------------------------------------------------------------------------------------------------------------------------------

3、通用方法類

  /// <summary>
    /// 通用工具函數類
    /// </summary>
    public class CommonHelper
    {
        /// <summary>
        /// Converts the string to decimal.
        /// </summary>
        /// <param name="strValue">The string value.</param>
        /// <returns></returns>
        public static decimal ConvertStringToDecimal(string strValue)
        {
            decimal decimalValue;
            try
            {
                decimalValue = Convert.ToDecimal(strValue);
            }
            catch
            {
                decimalValue = 0;
            }
            return decimalValue;
        }

        /// <summary>
        /// 獲取公用桌面路徑
        /// </summary>
        /// <returns></returns>
        public static string GetAllUsersDesktopFolderPath()
        {
            LogHelper.Info("###open註冊表");
            RegistryKey folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
            LogHelper.Info("###註冊表open完成");
            string desktopPath = folders.GetValue("Common Desktop").ToString();
            LogHelper.Info("###退出【獲取公用桌面路徑】方法");
            return desktopPath;
        }


        /// <summary>
        /// 根據Xpath獲取CDATA中的值
        /// </summary>
        /// <param name="strXmlText">xml字符串</param>
        /// <param name="strXpath">Xpath表達式</param>
        /// <returns></returns>
        public static string GetCDataInnerText(string strXmlText, string strXpath)
        {
            string strResult = string.Empty;
            XmlDocument doc = new XmlDocument
            {
                InnerXml = strXmlText
            };
            XmlNode nDataNode = doc.SelectSingleNode(strXpath);
            if (!Equals(nDataNode, null))
            {
                if (nDataNode.HasChildNodes)
                {
                    if (nDataNode.FirstChild is XmlCDataSection nDataSection)
                    {
                        strResult = nDataSection.InnerText;
                    }
                }
            }
            return strResult;
        }

        /// <summary>
        /// 獲得當前工作路徑
        /// </summary>
        /// <returns></returns>
        public static string GetCurrentDirectory()
        {
            AssemblyName assemblyName = Assembly.GetExecutingAssembly().GetName();
            string fullAppName = assemblyName.CodeBase;
            string fullAppPath = Path.GetDirectoryName(fullAppName);
            if (string.IsNullOrEmpty(fullAppPath))
            {
                return string.Empty;
            }
            if (fullAppPath.StartsWith("file:", StringComparison.Ordinal))
            {
                fullAppPath = fullAppPath.Substring(6);
            }
            return fullAppPath + "\\";
        }

        /// <summary>
        /// 獲取執行路徑的文件名和擴展名
        /// </summary>
        /// <param name="fileFullPath">The file full path.</param>
        /// <returns></returns>
        public static string GetFileName(string fileFullPath)
        {
            return Path.GetFileName(fileFullPath);
        }

        /// <summary>
        /// 獲取文件路徑
        /// </summary>
        /// <param name="filename">文件名稱</param>
        /// <returns></returns>
        public static string GetFilePathAtCurrentDirectory(string filename)
        {
            return GetCurrentDirectory() + filename;
        }

        /// <summary>
        /// 執行程序名稱
        /// </summary>
        /// <returns></returns>
        public static string GetMainExeName()
        {
            return AppDomain.CurrentDomain.FriendlyName;
        }

        /// <summary>
        /// 根據Xpath獲取CDATA中的值
        /// </summary>
        /// <param name="strXmlText">xml字符串</param>
        /// <param name="strCdataXpath">查找CDATA</param>
        /// <param name="strNodeXpath">查找NODE</param>
        /// <returns></returns>
        public static string GetNodeFromCDataInnerText(string strXmlText, string strCdataXpath, string strNodeXpath)
        {
            try
            {
                string nodeValue = string.Empty;
                string strResult = GetCDataInnerText(strXmlText, strCdataXpath);
                if (!string.IsNullOrEmpty(strResult))
                {
                    XmlDocument doc = new XmlDocument
                    {
                        InnerXml = strResult
                    };
                    XmlNode nDataNode = doc.SelectSingleNode(strNodeXpath);
                    if (!Equals(nDataNode, null))
                    {
                        nodeValue = nDataNode.InnerXml;
                    }
                }
                return nodeValue;
            }
            catch
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// 獲取節點的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static string GetNodeInnerTextByXpath(string strXmlText, string xpath)
        {
            string strReslt = string.Empty;
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

        /// <summary>
        /// 獲取節點的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static string GetNodeOuterXmlByXpath(string strXmlText, string xpath)
        {
            string strReslt = string.Empty;
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

        /// <summary>
        /// 獲取節點的值
        /// </summary>
        /// <param name="strXmlText">The string XML text.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static XmlNode GetNodeByXpath(string strXmlText, string xpath)
        {
            if (!string.IsNullOrEmpty(strXmlText))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = strXmlText
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                return node;
            }
            return null;
        }

        /// <summary>
        /// 獲取節點的值
        /// </summary>
        /// <param name="nodeVNode">The node v node.</param>
        /// <param name="xpath">The xpath.</param>
        /// <returns></returns>
        public static object GetNodeInnerTextFromNodeByXpath(XmlNode nodeVNode, string xpath)
        {
            object strReslt = string.Empty;
            if (!Equals(nodeVNode, null))
            {
                XmlDocument doc = new XmlDocument
                {
                    InnerXml = nodeVNode.OuterXml
                };
                XmlNode node = doc.SelectSingleNode(xpath);
                if (!Equals(node, null))
                {
                    strReslt = node.InnerText;
                }
            }
            return strReslt;
        }

        /// <summary>
        /// 獲取目錄信息
        /// </summary>
        /// <param name="fileFullPath">The file full path.</param>
        /// <returns></returns>
        public static string GetPath(string fileFullPath)
        {
            return Path.GetDirectoryName(fileFullPath);
        }

       

        /// <summary>
        /// 獲得臨時數據目錄
        /// </summary>
        /// <returns></returns>
        public static string GetTempDirectory()
        {
            string path = GetCurrentDirectory();
            path = path + "tempfiles";
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            return path;
        }

        /// <summary>
        /// 啓動新實例
        /// </summary>
        /// <param name="appName">Name of the application.</param>
        public static void StartExe(string appName)
        {
            if (!string.IsNullOrEmpty(appName))
            {
                string path = Path.GetDirectoryName(appName);
                if (path != null)
                {
                    Process ps = new Process
                    {
                        StartInfo = new ProcessStartInfo
                        {
                            FileName = appName,
                            Arguments = "T",
                            CreateNoWindow = true,
                            WorkingDirectory = path
                        }
                    };
                    ps.Start();
                }
            }
        }

        /// <summary>
        /// Opens the registry path.
        /// </summary>
        /// <param name="root">The root.</param>
        /// <param name="s">The s.</param>
        /// <returns></returns>
        private static RegistryKey OpenRegistryPath(RegistryKey root, string s)
        {
            s = s.Remove(0, 1) + @"/";
            while (s.IndexOf(@"/", StringComparison.Ordinal) != -1)
            {
                if (root != null)
                {
                    root = root.OpenSubKey(s.Substring(0, s.IndexOf(@"/", StringComparison.Ordinal)));
                    s = s.Remove(0, s.IndexOf(@"/", StringComparison.Ordinal) + 1);
                }
            }
            return root;
        }

        /// <summary>
        /// Gets the quarter.
        /// </summary>
        /// <returns></returns>
        public static string GetQuarter()
        {
            string period = string.Empty;
            switch (DateTime.Now.Month)
            {
                case 1:
                    period = DateTime.Now.AddYears(-1).ToString("yyyy-04");
                    break;
                case 4:
                    period = DateTime.Now.ToString("yyyy-01");
                    break;
                case 7:
                    period = DateTime.Now.ToString("yyyy-02");
                    break;
                case 10:
                    period = DateTime.Now.ToString("yyyy-03");
                    break;
            }
            return period;
        }

        /// <summary>
        /// Checks the quarter.
        /// </summary>
        /// <returns></returns>
        public static string CheckQuarter()
        {
            switch (DateTime.Now.Month)
            {
                case 1:
                    return DateTime.Now.AddYears(-1).ToString("yyyy年第四季度");
                case 4:
                    return DateTime.Now.ToString("yyyy年第一季度");
                case 7:
                    return DateTime.Now.ToString("yyyy年第二季度");
                case 10:
                    return DateTime.Now.ToString("yyyy年第三季度");
            }
            return "當前不是納稅期";
        }

        /// <summary>
        /// 當前是否爲整季度
        /// </summary>
        /// <returns>
        ///   <c>true</c> if this instance is quarter; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsQuarter()
        {
            int month = DateTime.Now.Month;
            return month == 1 || month == 4 || month == 7 || month == 10;
        }

        /// <summary>
        /// 獲取html頁面
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="encoding">The encoding.</param>
        /// <param name="message">The message.</param>
        /// <returns></returns>
        public static string GetWebPageData(string url, Encoding encoding, out string message)
        {
            string sRslt = null;
            message = string.Empty;
            WebResponse oWebRps = null;
            WebRequest oWebRqst = WebRequest.Create(url);
            oWebRqst.Timeout = 50000;
            try
            {
                oWebRps = oWebRqst.GetResponse();
            }
            catch (WebException e)
            {
                message = e.Message;
            }
            catch (Exception e)
            {
                message = e.ToString();
            }
            finally
            {
                if (oWebRps != null)
                {
                    StreamReader oStreamRd = new StreamReader(oWebRps.GetResponseStream() ?? throw new InvalidOperationException(), encoding);
                    sRslt = oStreamRd.ReadToEnd();
                    oStreamRd.Close();
                    oWebRps.Close();
                }
            }
            return sRslt;
        }
        /// <summary>  
        /// 運行DOS命令  
        /// DOS關閉進程命令(ntsd -c q -p PID )PID爲進程的ID  
        /// </summary>  
        /// <param name="command"></param>  
        /// <returns></returns>  
        public static string RunCmd(string command)
        {
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/c " + command;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            return p.StandardOutput.ReadToEnd();
        }
        /// <summary>
        /// 關閉應用程序
        /// </summary>
        /// <param name="applicationName">應用程序名稱,不包含.exe後綴</param>
        /// <returns></returns>
        public static bool ExitProcess(string applicationName)
        {
            try
            {
                Process[] processList = Process.GetProcessesByName(applicationName);
                foreach (Process item in processList)
                {
                    if (item.MainModule.FileName.EndsWith(applicationName + ".exe"))
                    {
                        RunCmd("taskkill /im " + applicationName + ".exe" + " /f ");
                    }
                }
                return true;
            }
            catch (Exception exception)
            {
                LogHelper.Info($"關閉進程出現錯誤:{exception}");
                return false;
            }
        }

        /// <summary>
        /// 獲取時間戳
        /// </summary>
        /// <returns></returns>
        public static string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

        public static string ReturnResult(object data, int code, string message)
        {
            Result result = new Result
            {
                Code = code,
                Data = data,
                Message = message
            };
            string strResult = JsonConvert.SerializeObject(result);
            //LogHelper.Info(strResult);
            return strResult;
        }

        public static string ReturnResult(object data, int code)
        {
            return ReturnResult(data, code, string.Empty);
        }

        public static string ReturnResult(object data)
        {
            return ReturnResult(data, 0, string.Empty);
        }

        public static string ReturnResultError(int code, string message)
        {
            return ReturnResult(null, code, message);
        }

        public static string ReturnResultError(string message)
        {
            return ReturnResult(null, -99, message);
        }

        /// <summary>
        /// Automatics the reg COM.
        /// </summary>
        /// <param name="strCmd">The string command.</param>
        /// <returns></returns>
        public static string AutoRegCom(string strCmd)
        {
            try
            {
                Process myProcess = new Process();
                ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("cmd.exe")
                {
                    UseShellExecute = false,
                    CreateNoWindow = true,
                    RedirectStandardOutput = true
                };
                myProcess.StartInfo = myProcessStartInfo;
                myProcessStartInfo.Arguments = "/c " + strCmd;
                myProcess.Start();
                StreamReader myStreamReader = myProcess.StandardOutput;
                string rInfo = myStreamReader.ReadToEnd();
                myProcess.Close();
                rInfo = strCmd + "\r\n" + rInfo;
                return rInfo;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        /// <summary>
        /// 運行控制檯程序,獲取程序的輸出結果
        /// </summary>
        /// <param name="exePath">The executable path.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public static string GetRunOtherApplicationResult(string exePath, string parameters)
        {
            ProcessStartInfo psi = new ProcessStartInfo
            {
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = false,
                FileName = exePath,
                Arguments = parameters
            };
            Process process = Process.Start(psi);
            if (process != null)
            {
                StreamReader outputStreamReader = process.StandardOutput;
                StreamReader errStreamReader = process.StandardError;
                process.WaitForExit(2000);
                if (process.HasExited)
                {
                    string output = outputStreamReader.ReadToEnd();
                    string error = errStreamReader.ReadToEnd();
                    return output.Replace("\r\n", string.Empty);
                }
            }
            return string.Empty;
        }

        /// <summary>
        /// 根據進程名,關閉系統
        /// add by shenxue 
        /// </summary>
        /// <param name="name">進行名</param>
        public static void KillProcess(string name)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                return;
            }
            Process[] arrayProcess = Process.GetProcessesByName(name);
            foreach (Process v in arrayProcess)
            {
                LogHelper.Info(v.ProcessName);
                v.Kill();
            }
        }

        internal class NsrsbhEntity
        {
            public string msg { get; set; }
            public string code { get; set; }
            public IList<Datum> data { get; set; }
        }

        internal class Datum
        {
            public string id { get; set; }
            public string enterpriseName { get; set; }
            public string taxpayerNum { get; set; }
            public bool registry { get; set; }
            public long ts { get; set; }
        }
    }

    /// <summary>
    /// 通用結果類
    /// </summary>
    public class Result<T>
    {
        #region 數據屬性

        /// <summary>
        /// 狀態碼
        /// </summary>
        public int Code { get; set; }

        /// <summary>
        /// 消息
        /// </summary>
        public string Message { get; set; }

        /// <summary>
        /// 數據
        /// </summary>
        public T Data { get; set; }

        #endregion
    }

    /// <summary>
    /// 默認結果類
    /// </summary>
    public class Result : Result<object>
    {
    }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章