You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C# Firebird执行数据库select查询并在Shell中展示结果

C# 连接Firebird数据库执行SELECT查询的实现方案

现有代码核心问题

  • FbCommand实例未关联已打开的数据库连接和事务对象,直接运行会抛出执行上下文缺失的错误
  • 查询操作调用了ExecuteNonQuery()方法,该方法仅用于INSERT/UPDATE/DELETE等写操作,只会返回受影响行数,无法获取查询结果
  • 只读查询场景下不需要显式开启事务,属于冗余代码

前置准备

首先确保你的项目已经安装了Firebird官方驱动:在Visual Studio的NuGet包管理器中搜索安装FirebirdSql.Data.FirebirdClient即可。

修正后的完整可运行代码

using System;
using FirebirdSql.Data.FirebirdClient;

namespace ConsoleApp1
{
    class Program
    {
        static public void Main()
        {
            // 连接字符串可按需添加Charset=utf8避免中文乱码
            string connStr = "database=SECRET.FB;user=SYSDBA;password=masterkey;DataSource=serverip;Port=3050;Charset=utf8";
            // using语法会自动释放连接资源,无需手动Close
            using (var con = new FbConnection(connStr))
            {
                con.Open();
                // 构造查询命令,关联已打开的连接
                string sql = "SELECT n.nrdokwew, n.datadok, k.nazwaskr FROM nagl n JOIN kontrah k on (n.id_kontrah = k.id_kontrah)";
                using (var cmd = new FbCommand(sql, con))
                {
                    // 执行查询返回数据读取器
                    using (var reader = cmd.ExecuteReader())
                    {
                        // 逐行读取查询结果
                        while (reader.Read())
                        {
                            // 按字段名读取对应值,类型可按需转换
                            string nrdokwew = reader["nrdokwew"].ToString();
                            DateTime datadok = Convert.ToDateTime(reader["datadok"]);
                            string nazwaskr = reader["nazwaskr"].ToString();
                            // 控制台输出结果
                            Console.WriteLine($"单据号:{nrdokwew},单据日期:{datadok:yyyy-MM-dd},承包商简称:{nazwaskr}");
                        }
                    }
                }
            }
            Console.ReadKey();
        }
    }
}

实现逻辑拆解

  • 连接初始化:通过FbConnection传入合法的连接字符串,调用Open()方法建立和Firebird数据库的物理连接
  • 命令构造:FbCommand需要绑定SQL语句和已打开的连接对象,作为查询执行的上下文
  • 结果读取:调用ExecuteReader()返回FbDataReader对象,通过Read()方法逐行遍历结果集,通过字段名或索引获取对应列的值
  • 资源释放:所有实现了IDisposable接口的对象(连接、命令、读取器)都用using包裹,退出代码块时自动释放资源,避免连接泄露

如果需要把查询结果存到内存表后续处理,可以使用FbDataAdapter填充DataTable,示例代码片段如下:

using (var adapter = new FbDataAdapter(cmd))
{
    System.Data.DataTable dt = new System.Data.DataTable();
    adapter.Fill(dt);
    // dt中存储了全部查询结果,可直接绑定到UI控件或者遍历
}

内容的提问来源于stack exchange,提问作者shade999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:24:03