文章
· 十月 8, 2022 阅读大约需 6 分钟

10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用

        安装InterSystems IRIS数据库的ODBC驱动,在Windows系统中配置数据源后,可以使用Microsoft Visual Studio 开发工具 中的服务器资源管理器很方便地连接到InterSystems IRIS数据库服务器,利用数据库连接的可视化视图,可以非常方便快捷地进行连接到InterSystems IRIS数据库的应用开发。本文将展示一个利用以上方式实现的例子,开发工具为Microsoft Visual Studio 2019,开发语言为C#,10分钟快速开发实现一个连接到InterSystems IRIS数据库的C#应用,在本例子中,可以通过选择日期和科室,查询指定日期和科室的就诊日志。

1、在成功安装InterSystems IRIS数据库的ODBC驱动后,从Windows的“控制面板”中选择“管理工具”,在“管理工具”中选择“ODBC数据源”。

2、在ODBC数据源管理的“用户DSN”标签下,选择“添加”,在随后弹出的“创建新数据源”窗口中选择“InterSystems ODBC”,点击“完成”进入下一步。

 

3、在弹出的“InterSystems ODBC数据源设置”窗口中,为数据源命名,填写连接数据库的信息,访问用户名和密码,点击“测试连接”,成功后点击“OK”保存。

 

4、打开Microsoft Visual Studio 2019,选择“文件”->“新建”->“项目” ,在弹出的创建新项目窗口中,选择C#语言、Windows窗体应用。

5、新建项目完成后,在 Microsoft Visual Studio 2019开发工具的菜单栏选择“视图”->“服务器资源管理器”,右键“服务器资源管理器”视图中的“数据连接”,在弹出的“添加数据库连接”窗口中,指定在3中已经新建好的数据源,点击“测试连接”,测试连接成功后,点击“确定”关闭窗口,在“服务器资源管理器”视图中的“数据连接”中可以看到添加成功的数据库连接,选中数据库后可以展开其中的表。

 

6、在本例子中,将介绍两种数据库查询操作方式,其一为常见使用SQL语句的方式,其二为添加数据集的方式,添加数据集的操作如下:从菜单栏选择“视图”->“其他窗口”->“数据源”,在“数据源”视图中点击“添加新数据源”,选择数据库后,可以为数据集添加绑定数据库的表,如为本例中Loc1(科室)数据集成功添加绑定CT_Loc表后,可以在可视化视图中查看数据表数据,并可以被Form可视化窗体中添加的控件直接使用。

 

7、在Form可视化窗体设计器中,通过工具箱视图添加3个Label控件,分别显示应用标题、日期和科室,再添加1个DateTimePicker日期/时间选择器,并在其CustomFormat属性中设置日期/时间格式“yyyy-MM-dd”,用于选择查询日期;1个ComboBox下拉列表选择框,用于选择查询科室;1个Button按钮,用于执行查询;一个DataGridView数据网格视图,用于显示查询结果。

 

8、选中ComboBox下拉列表选择框控件,点击控件中右上角出现的箭头,弹出ComboBox数据绑定窗口,勾选“使用数据绑定项”,之后选择6中添加的数据集Loc1,设置“显示成员”为“科室名称”字段,“值成员”为“科室ID”字段,“选定值”为“科室ID”,上述操作便完成了ComboBox控件直接使用数据集的设置。

 

9、点击项目启动按钮,点击选择科室的下拉列表框,可以看到科室列表,由此可以看出,通过上面6、7、8三个步骤的简单操作,即完成了C#窗体控件与已添加的数据集的快速绑定,实现了查询IRIS数据库的快速操作。

 

10、最后双击窗体中的“查询科室日志”按钮,在按钮点击事件函数中,添加通过SQL语句查询IRIS数据库的代码,并通过DataGridView的DataSource属性将SQL语句的查询结果绑定到DataGridView数据网格视图。完成后,再次运行项目,可以实现通过选择日期和科室,查询指定日期和科室的就诊日志。

附上项目的核心代码,少部分细节地方参见代码中注释部分:

Form1.cs  //C#窗体及控件加载和操作代码

using System;
using System.Windows.Forms;
namespace QuickApp1
{
    public partial class Form1 : Form
    {
        //新建IRIS数据库的ODBC连接对象
        ODBCHelper1 dBCHelper1 = new ODBCHelper1();
        //避免comboBox数据未绑定时的异常退出
        bool cmbFlag = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void Loc_comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //排除窗体未加载时comboBox数据未绑定时的异常退出错误
            try
            {
                if (cmbFlag && !String.IsNullOrEmpty(Loc_comboBox1.SelectedValue.ToString()))
                {
                    string selectLoc = Loc_comboBox1.SelectedValue.ToString();
                }
            }
            catch (Exception)
            {
                ;
            }  
        }

        //按钮点击事件
        private void findAdmListBtn1_Click(object sender, EventArgs e)
        {
            //取日期选择器的日期
            string selectDate = dateTimePicker1.Text.ToString();
            //取科室下拉选择框的科室
            string selectLoc = Loc_comboBox1.SelectedValue.ToString();
            //通过SQL语句查询IRIS数据库
            string sql = "SELECT A.PAADM_DepCode_DR->CTLOC_Desc 科室, A.PAADM_PAPMI_DR->PAPMI_Name 患者姓名,decode(A.PAADM_PAPMI_DR->PAPMI_Sex_DR,1,'女',2,'男','未知') 性别,A.PAADM_AdmDocCodeDR->CTPCP_Desc 医生姓名, A.PAADM_ADMNo 就诊流水号,A.PAADM_AdmDate 就诊日期,A.PAADM_AdmTime 就诊时间 FROM PA_Adm A WHERE A.PAADM_AdmDate =" +
                "'" + selectDate + "'" + 
                "AND A.PAADM_DepCode_DR = " +
                "'" + selectLoc + "'";
            //通过DataGridView的DataSource属性将SQL语句的查询结果绑定到DataGridView数据表格视图
            this.dataGridView1.DataSource = dBCHelper1.CacheExeQuery(sql);
        }

        private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            //为DataGridView数据表格添加行序号
            try
            {
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                    this.dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
            }
            catch
            {
                MessageBox.Show("处理异常:表格行序号添加异常");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //窗体加载时处理
            // TODO: 这行代码将数据加载到表“loc1.CT_Loc”中。您可以根据需要移动或删除它。
            this.cT_LocTableAdapter.Fill(this.loc1.CT_Loc);
            cmbFlag = true;
        }
    }
}

ODBCHelper1.cs  //ODBC数据库连接公共类

using System.Data;
using System.Data.Odbc;
namespace QuickApp1
{
    internal class ODBCHelper1
    {
        //ODBC连接格式化字符串,将Dsn(连接名称)、Server(IRIS服务器IP)、Port(端口)、DataBase(数据库)、Uid(用户名)、Pwd(用户名)换成你自己的。
        public static string conString = "Dsn=irisxxx;Server=xxx.xxx.xxx.xxx;Port=xxxx;DataBase=xxxx;Authentication method=0;Uid=xxxxxx;Pwd=******;static cursors=0;query timeout=0;unicode sqltypes=0;";
        public DataTable CacheExeQuery(string sql)
        {
            using (OdbcConnection con = new OdbcConnection(conString))
            {
                using (OdbcCommand cmd = new OdbcCommand(sql, con))
                {
                    using (OdbcDataAdapter da = new OdbcDataAdapter(cmd))
                    {
                        DataTable dt = new DataTable();
                        con.Open();
                        da.Fill(dt);
                        return dt;
                    }
                }
            }
        }
    }
}

 

讨论 (6)5
登录或注册以继续