连接火鸟数据库分两种方式:

(1)服务器方式

本地装有FireBird数据库,这种方式相对简单一些,只用到一个类(FirebirdSql.Data.FirebirdClient)就好;

(2)嵌入式方式

本地无须装FireBird数据库,但是需要引用一堆文件(说实话我也搞不清哪些要、哪些不要),如下图:

具体代码实现:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
using FirebirdSql.Data.Services;namespace DC.DBHelp.FireBird
{public class FireBirdHelper{private FbConnection _conn = null;private string _strConn = "";private readonly string _pathSys;private readonly string _path;/// <summary>/// 构造函数/// </summary>/// <param name="pathSys">应用程序路径</param>/// <param name="path">数据库fdb文件路径</param>/// <param name="isServer">true=服务器模式;false=嵌入式模式;</param>public FireBirdHelper(string pathSys, string path, bool isServer=false){_pathSys = pathSys;_path = path;_strConn = isServer ? GetConnString_Server() : GetConnString_Client();_conn = new FbConnection(_strConn);}/// <summary>/// 服务器式连接/// </summary>/// <param name="path"></param>/// <returns></returns>private string GetConnString_Server(){FbConnectionStringBuilder cs = new FbConnectionStringBuilder();cs.UserID = "SYSDBA";cs.Password = "masterkey";cs.Database = _path;cs.DataSource = "localhost";cs.Charset = "UTF8";cs.Port = 3050;cs.Dialect = 3;cs.Role = "";cs.ConnectionLifeTime = 15;cs.Pooling = true;cs.MinPoolSize = 0;cs.MaxPoolSize = 50;cs.PacketSize = 8192;cs.ServerType = FbServerType.Default;return cs.ToString();}/// <summary>/// 嵌入式连接/// </summary>/// <param name="path"></param>/// <returns></returns>private string GetConnString_Client(){FbConnectionStringBuilder cs = new FbConnectionStringBuilder();cs.ClientLibrary = $"{_pathSys}\\fbembed.dll";cs.UserID = "SYSDBA";cs.Password = "masterkey";cs.Database = _path;cs.Charset = "UTF8";cs.ServerType = FbServerType.Embedded;return cs.ToString();}private void MyOpen(){if (_conn.State != ConnectionState.Open)_conn.Open();}private void MyClose(){if (_conn.State != ConnectionState.Closed)_conn.Close();}/// <summary>/// 数据库连接测试 (链接目标库)/// </summary>/// <param name="di"></param>/// <param name="errInfo">连接失败时的异常信息</param>/// <returns></returns>public bool ConnectTest(out string errInfo){errInfo = string.Empty;try{_conn = new FbConnection(_strConn);MyOpen();MyClose();}catch (Exception ex){errInfo = $"连接失败。失败原因如下:{ex.Message}";}return string.IsNullOrEmpty(errInfo);}public DataSet ExecuteSqlGetDs(string sql){DataSet ds = new DataSet();MyOpen();FbCommand cmd = new FbCommand(sql, _conn);cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 60;FbDataAdapter fbAda = new FbDataAdapter(cmd);fbAda.Fill(ds);fbAda.Dispose();cmd.Dispose();MyClose();return ds;}public DataTable ExecuteSqlGetDt(string sql,int topRows){DataTable dt = new DataTable();MyOpen();FbCommand cmd = new FbCommand(sql, _conn);cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 60;FbDataAdapter fbAda = new FbDataAdapter(cmd);fbAda.Fill(0,topRows,dt);fbAda.Dispose();cmd.Dispose();MyClose();return dt;}/// <summary>  /// 执行SQL,返回受影响的行数  /// </summary>  public int ExecuteNonQuery(string sql, int timeOut = 5){MyOpen();FbCommand cmd = new FbCommand(sql, _conn);cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 60;int res = cmd.ExecuteNonQuery();cmd.Dispose();MyClose();return res;}/// <summary>/// Get the list of User Tables///  TABLE_CATALOG,  TABLE_SCHEMA, TABLE_NAME,  TABLE_TYPE/// </summary>/// <returns></returns>public DataTable GetTableNameList_User(){MyOpen();DataTable dta=_conn.GetSchema("Tables", new string[] { null, null, null, "TABLE" });MyClose();if (dta != null){DataTable dt = new DataTable();dt.Columns.Add("Name");foreach (DataRow dra in dta.Rows){DataRow dr = dt.NewRow();dr[0] = dra["TABLE_NAME"].ToString().Trim();dt.Rows.Add(dr);}return dt;}return null;}/// <summary>/// Get the list of System Tables///  TABLE_CATALOG,  TABLE_SCHEMA, TABLE_NAME,  TABLE_TYPE/// </summary>/// <returns></returns>public DataTable GetTableNameList_Sys(){MyOpen();DataTable dta = _conn.GetSchema("Tables", new string[] { null, null, null, "SYSTEM TABLE" });MyClose();return dta;}/// <summary>/// Get Table Columns/// TABLE_NAME,COLUMN_NAME,COLUMN_DATA_TYPE,COLUMN_SIZE,ORDINAL_POSITION/// </summary>/// <param name="tableName"></param>/// <returns></returns>public DataTable GetColumnInfo(string tableName = ""){MyOpen();DataTable dta =string.IsNullOrWhiteSpace(tableName)? _conn.GetSchema("Columns", new string[] { null, null, null }): _conn.GetSchema("Columns", new string[] { null, null, tableName.ToUpper() });MyClose();return dta;}/// <summary>/// 数据库还原 /// </summary>/// <param name="pathBak">文件路径</param>public void RestoreDb(string pathBak){try{FbRestore res = new FbRestore();res.ConnectionString = _strConn;res.BackupFiles.Add(new FbBackupFile(pathBak, 2048));res.Verbose = true;res.PageSize = 4096;res.Options = FbRestoreFlags.Create | FbRestoreFlags.Replace;res.Execute();}catch (Exception ex){}}/// <summary>/// 数据库备份/// </summary>/// <param name="pathBak">文件路径</param>public void BackUpDb(string pathBak){try{FbBackup bakup = new FbBackup();bakup.ConnectionString = _strConn;bakup.BackupFiles.Add(new FbBackupFile(pathBak, 2048));bakup.Verbose = true;bakup.Options = FbBackupFlags.IgnoreLimbo;bakup.Execute();}catch (Exception ex){}}}
}

C# 操作FireBird(火鸟)数据库相关推荐

  1. 火鸟数据库 linux,firebird数据库

    Firebird是一个跨平台的关系数据库系统,该系统使用起来十分方便.安全.可靠,操作和维护起来也是十分简单,且兼容性十分强大,目前能够运行在Windows.linux和各种Unix操作系统上,它既能 ...

  2. 在VisualStudio中使用EF操作Firebird数据库

    在VisualStudio中使用EF操作Firebird数据库 因项目需要,笔者需要在VS2019中使用EF操作Firebird数据库.但Firebird在国内算是一款非常小众的关系型数据库,由于用的 ...

  3. 使用 springboot + mybatis-plus 连接firebird(火鸟数据库)

    使用 springboot + mybatis-plus 连接firebird(火鸟数据库) 首先准备springboot 工程并且引入mybatis-plus 引入firebird数据库驱动,下载地 ...

  4. C# 操作FireBird 附源码

    写了一个C#操作firebird数据库的小Demo,有需要的可以研究研究, 步骤: 1.创建数据库 2.建数据表,插入数据,并读取. 写的时候碰到N多奇葩问题,记录了一些 解决方案: 程序集-生成-目 ...

  5. 用Node操作Firebird。

    2019独角兽企业重金招聘Python工程师标准>>> FireBird Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows.linux和各种Unix操作系统 ...

  6. python资料库-Python操作三大主流数据库

    学会使用的技术栈:python flask redis mongoDB mysql 第1章 数据库简介 简单介绍Mysql.数据库简介.导学篇 第2章 mysql基础 XAMPP 集成好的 最流行的P ...

  7. mybatisplus 操作另一个数据库的数据_c#连接sql数据库以及操作数据库

    1.概述 http://ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行 ...

  8. python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  9. java通过jxl处理execl空行_jxl操作Excel导入数据库之空行的处理

    jxl因其快速小巧受到大家的欢迎,但是jxl还是有许多不尽如人意的地方. 本文旨在解决jxl读取excel数据时无法自动取掉空行的问题,其实就是添加一个方法. ? //返回去掉空行的记录数 priva ...

最新文章

  1. 模型压缩、模型剪枝、模型部署
  2. TensorFlow 常见错误与解决方法——长期不定时更新
  3. Git远程:分支的upstream
  4. 您能看出这个Double Check里的问题吗?
  5. Winform中使用NPOI实现导出Excel并文件另存为
  6. Java Object中的clone方法
  7. Vasya and Book
  8. 《大型网站技术架构》读书笔记二:大型网站架构模式
  9. WinForm C#全局错误捕捉处理【整理】
  10. Python实现中英文分词
  11. 【干货分享】企业数据中台整体介绍及建设方案(文末附52页pdf下载链接)
  12. WinForm------如何修改PanelControl控件背景色
  13. 代理(Proxy)和背靠背用户代理(B2BUA)
  14. Intent与intent-filter
  15. 最简单代码画的五角星
  16. hostapd对WIFI 热点(AP)的配置方法
  17. Gopher Daily (2020.05.02) ʕ◔ϖ◔ʔ
  18. 关于如何将java桌面程序打包成exe可执行文件
  19. Unity Shader - Billboard 广告板/广告牌 - BB树,BB投影
  20. 360linux网卡驱动,驱动下载

热门文章

  1. 糟糕的开发人员–好老板
  2. JMU软件20 计算机网络复习
  3. Minitab 软件部署指南详情
  4. 计算机网络技术英文求职表,计算机网络英文简历表格
  5. 当前主流、最新网络技术回眸(一)
  6. 开源的防火墙 Linux 发行版:IPFire
  7. Linux--文本三剑客
  8. 博智林产品经理二面面试
  9. 中国代表:中国政府从未要求企业安装后门
  10. 转载【win10蓝牙设备删除失败】《xbox one手柄蓝牙设备删除失败解决方案》