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

C# WinForm如何将Oracle数据库PROVA表数据加载显示到GridView

Oracle数据库绑定WinForm DataGridView代码修正

原代码存在的问题

  • 命名空间引用错误:同时引用了已废弃的System.Data.OracleClient类库,且缺少官方托管驱动的核心命名空间Oracle.ManagedDataAccess.Client
  • 连接字符串语法错误:末尾多写多余右括号,导致参数解析失败
  • OracleCommand未关联已打开的数据库连接,执行查询时会抛出异常
  • DataGridView的DataSource是属性而非方法,原调用语法错误
  • 未对数据库相关非托管资源做自动释放处理,存在资源泄漏风险
  • 无异常捕获逻辑,数据库操作出错时会直接导致程序闪退

修正后完整代码

using System;
using System.Data;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client; // 仅保留官方托管驱动引用

namespace dbOracleForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 修正连接字符串多余右括号的问题
            string connectionString = "Data Source =  (DESCRIPTION = " +
                                      "(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))" +
                                      "(CONNECT_DATA = " +
                                      " (SERVER = DEDICATED) " +
                                      " (SERVICE_NAME = orcl.home) " +
                                      "))" +
                                      "; User Id = system;password = orcl;";
            
            // 用using块自动释放所有非托管资源
            using (OracleConnection con = new OracleConnection(connectionString))
            {
                try
                {
                    con.Open();
                    // 创建命令时直接关联连接对象
                    using (OracleCommand cmd = new OracleCommand("SELECT NOME, COGNOME, NUMTELEFONO FROM PROVA ORDER BY COGNOME DESC", con))
                    {
                        cmd.CommandType = CommandType.Text;
                        using (OracleDataReader dr = cmd.ExecuteReader())
                        {
                            DataTable dt = new DataTable();
                            dt.Load(dr);
                            // 修正DataSource赋值语法,属性用=赋值而非方法调用
                            dataGridView1.DataSource = dt;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"数据加载失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

注意事项

  • 使用前请先通过NuGet包管理器安装Oracle.ManagedDataAccess官方驱动包
  • 请根据自己实际的Oracle配置修改连接字符串中的服务名、账号、密码参数
  • 确保system账号有PROVA表的查询权限,否则会触发权限不足错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:02