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;
}
}
}
}
}
}