艾伟_转载:基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写

简介: 本系列文章导航基于.NET平台的Windows编程实战(一)——前言基于.NET平台的Windows编程实战(二)—— 需求分析与数据库设计基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写基于.NET平台的Windows编程实战(五)—— 问卷管理功能的实现基于.NET平台的Windows编程实战(六)—— 题目管理功能的实现 大家都知道本系统的正常运行少不了数据库操作这一块,且其在本系统中具有决定性作用,可以说没有它的操作系统将无法运行,故在本节课程中,专门把针对数据库的操作类拿出来讲讲,以便大家更加容易理解后面的课程。

本系列文章导航

基于.NET平台的Windows编程实战(一)——前言

基于.NET平台的Windows编程实战(二)—— 需求分析与数据库设计

基于.NET平台的Windows编程实战(四)—— 数据库操作类的编写

基于.NET平台的Windows编程实战(五)—— 问卷管理功能的实现

基于.NET平台的Windows编程实战(六)—— 题目管理功能的实现

大家都知道本系统的正常运行少不了数据库操作这一块,且其在本系统中具有决定性作用,可以说没有它的操作系统将无法运行,故在本节课程中,专门把针对数据库的操作类拿出来讲讲,以便大家更加容易理解后面的课程。

好,进入正题……

首先,我们来新建一个类,方法如下:

打开上一节课我们新建的QuestionnaireSystem项目,右击项目名,在出现的对话框中选择“添加”à“类”,在弹出的“添加新项”中选择“类”,并在下面的“名称”中输入DbOperate”,点“添加”,如下图4-1所示:

 

OK,这样我们的DbOperate类文件就创建好了,但里面还是空白的,所以我们下面就一起来编写相应的方法吧。

既然要对数据库进行操作,我们先要做的第一件事当然是要写个方法来打开数据库了。因为我们用的是Access2003数据库,所以我们得首先要using 进一个System.Data.OleDb 类库及一个System.Data 类库,方法:在新建的DbOperate文件的最上面,也就是写有几个using …… 地方,写入如下内容:

 

using System.Data;

using System.Data.OleDb;

 

其次,我们需要定义如下二个数据库操作对象:

 

protected OleDbConnection dbconn;//定义数据库连接对象

protected OleDbCommand dbcomm = new OleDbCommand();//定义数据库操作对象 

 

接下来,我们再写一个打开数据库连接的方法:

 

  /// <summary>
/// 打开数据库
/// </summary>
/// <returns></returns>
protected void CreateDbConn()
{
try
{
//捕获连接异常
string dbpath = @"DataBase\Lj_QuestionnaireSys.mdb";//设置数据库路径,如连接有问
题请在前面加上"..\..\",但在发布时要去掉前面的"..\..\"
dbconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
" + dbpath);//初始化数据库连接对象
dbcomm.Connection = dbconn;//设置数据库操作对象使用此dbconn对象
dbconn.Open();//打开数据库连接
}
catch (OleDbException) //如果出现数据库连接异常,则关闭数据库连接并弹出提示框
{
this.CloseDbConn();//关闭数据库连接
MessageBox.Show("数据连接错误!可能是数据库被删除了11,请联系相关技术人员!", "操作提示"
MessageBoxButtons.OK, MessageBoxIcon.Information);
// Console.Write(dbex.Message);

}
catch (Exception) //如果出现其他异常,则关闭数据库连接并弹出提示框
{
this.CloseDbConn(); //关闭数据库连接
MessageBox.Show("数据连接错误!可能是数据库被删除了,请联系相关技术人员!", "操作提示"
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

 

数据库打开了,总不能让其长期开着吧!故我们还得写一关闭的方法:

 

        /// 关闭数据库
///
protected void CloseDbConn()
{
if (dbconn.State == ConnectionState.Open) //如果数据库为打开状态,则关闭
{
dbconn.Close();
//关闭数据库连接
}
dbconn.Dispose();
//释放连接资源
dbcomm.Dispose();//释放操作资源
}

 

 

 

好,至此,“开门”[打开数据库]与“关门”[关闭数据库]的方法都搞定了,下面就让我们设法在“开门”后“关门”前偷偷的躲进去做点实事吧,即写一些方法来读取或更新数据:

 

Code
        /**//// 
        
/// 执行SQL语句
        
/// 
        
/// 传入的SQL语句

        public void ExcuteSql(string sqlText)
        
{
            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型为文本类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                dbcomm.ExecuteNonQuery();//执行操作
            }

            
catch (Exception) //如果出现异常,则提示错误
            {
                MessageBox.Show(
"数据库操作错误!""操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }

        }

        
/**//// 
        
/// 判断是否执行成功,返回所影响的行数
        
/// 
        
/// 传入的SQL语句
        
/// 影响的行数

        public int ExcuteIntSql(string sqlText)
        
{
            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                return dbcomm.ExecuteNonQuery();//执行操作,并返回影响的行数
            }

            
catch (Exception) 
            
{
                
//MessageBox.Show("数据库操作错误!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return 0;//如果出现异常,则返回0
              
            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }
 
        }

        
/**//// 
        
/// 返回查询出的单条数字记录结果
        
/// 
        
/// 传入的SQL语句
        
/// 查询出的数字结果

        public int ExcuteScrSql(string sqlText)
        
{
            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                return Convert.ToInt32(dbcomm.ExecuteScalar());//执行操作,并返回查询出的结果
            }

            
catch (Exception) 
            
{
                
return 0;//如果出现异常,则返回0
            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }

        }

        
/**//// 
        
/// 返回查询出的单条文字记录结果
        
/// 
        
/// 传入的SQL语句
        
/// 查询出的文字结果

        public string ExcuteStrScrSql(string sqlText)
        
{
            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                return dbcomm.ExecuteScalar().ToString();//执行操作,并返回查询出的结果
            }

            
catch (Exception)
            
{
                
return "";//如果出现异常,则返回空字符串
            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }

        }

        
/**//// 
        
/// 返回查询出的数据表
        
/// 
        
/// 传入的SQL语句
        
/// 查询出的数据表

        public DataTable GetDataTable(string sqlText)
        
{
            OleDbDataAdapter dbdapt 
= new OleDbDataAdapter();//实例化一个数据缓存适配器
            DataTable dt = new DataTable();//实例化一个数据表

            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                dbdapt.SelectCommand = dbcomm;//执行SQL语句,选择出数据
                dbdapt.Fill(dt);//填充数据表
            }

            
catch (Exception)
            
{

            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }

            
return dt;//返回查询出的数据表
        }

        
/**//// 
        
/// 按指定条数读出的Table数据表
        
/// 
        
/// 传入的SQL
        
/// 开始读数据的记录号
        
/// 所要读出的最大条数
        
/// 返回一数据表

        public DataTable GetPageDataTable(string sqlText,int pre,int maxcunt)
        
{
            OleDbDataAdapter dbdapt 
= new OleDbDataAdapter();//实例化一个数据缓存适配器
            DataSet ds = new DataSet();//实例化一个数据缓存器

            
try
            
{//捕获异常
                CreateDbConn();//建立连接
                dbcomm.CommandType = CommandType.Text;//设置操作类型
                dbcomm.CommandText = sqlText;//设置操作的SQL语句
                dbdapt.SelectCommand = dbcomm;//执行操作,选择出数据
                dbdapt.Fill(ds,pre,maxcunt,"db_Table");//按指定的条数填充数据表
            }

            
catch (Exception)
            
{

            }

            
finally
            
{
                CloseDbConn();
//关闭连接
            }

            
return ds.Tables["db_Table"];//返回数据表
        }

//以下为合并统计的数据库操作 以下注释同上面的差不多,就不再写了
        OleDbConnection conn;
        OleDbCommand comm 
= new OleDbCommand();
        
/**//// 
        
/// 连接数据库--合并统计用
        
/// 

        public void DbConn()
        
{
            
try
            

                
string _dbpath = @"DataBase\1.mdb";
                conn 
= new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _dbpath);
                comm.Connection 
= conn;
                conn.Open();
                
//MessageBox.Show(_dbpath);
            }

            
catch (OleDbException)
            
{
                CloseConn();
                MessageBox.Show(
"数据库连接错误!请检查数据库!""操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
catch (Exception)
            
{
                CloseConn();
                MessageBox.Show(
"数据库连接错误!请检查数据库!""操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }


        }

        
/**//// 
        
/// 关闭数据库--合并统计用
        
/// 

        public void CloseConn()
        
{
            
if (conn.State == ConnectionState.Open)
            
{
                conn.Close();
            }

            conn.Dispose();

            comm.Dispose();
        }

        
/**//// 
        
/// 返回数据表--合并统计用
        
/// 
        
/// 
        
/// 

        public DataTable GetTable(string sqlText)
        
{
            OleDbDataAdapter odbad 
= new OleDbDataAdapter();
            DataTable dt 
= new DataTable();
            
try
            
{
                DbConn();
                comm.CommandType 
= CommandType.Text;
                comm.CommandText 
= sqlText;
                odbad.SelectCommand 
= comm;
                odbad.Fill(dt);
            }

            
catch (OleDbException)
            
{
                MessageBox.Show(
"数据库连接错误!请选择正确的数据库!""操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
catch (Exception)
            
{
                MessageBox.Show(
"数据库连接错误!请选择正确的数据库!""操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            
finally
            
{
                CloseConn();
            }

            
return dt;
        }

        
/**//// 
        
/// 返回查询的结果(Int)--合并统计用
        
/// 
        
/// 传入的SQL
        
/// Int

        public int ExcueteIntSql(string sqlText)
        
{
            
try
            
{
                DbConn();
                comm.CommandText 
= sqlText;
                
return Convert.ToInt32(comm.ExecuteScalar());
            }

            
catch (Exception)
            
{
                
return 0;
            }

            
finally
            
{
                CloseConn();
            }


        }

 

OK!到此,整个类算是完工了,虽然不好[没进行性能方面的优化,也没引入存储过程的操作等等],但对于基本的操作已经够用的了,故在此不作这方面的讨论;
    在后期的其它系列课程中,我打算专门写一系列针对数据库操作优化类的课程,到那时我们再拿出来一起讨论^_^

本课就先到此吧,谢谢……

附,本课程源码下载

目录
打赏
0
0
0
0
52
分享
相关文章
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
99 12
DBeaver Ultimate Edtion 25.0 Multilingual (macOS, Linux, Windows) - 通用数据库工具
基于ssm的考研图书电子商务平台,附源码+数据库+论文
考研图书电子商务平台是一个基于Java的B/S架构系统,适用于Windows环境。该平台设有管理员和用户权限,管理员可管理商品、用户、留言板及订单,用户可管理收货地址、订单、收藏及购买商品。技术框架包括前端Vue+HTML+JavaScript+CSS+LayUI,后端SSM,数据库为MySQL。项目包含17个数据库表,支持Maven构建。提供演示视频和详细文档,支持免费远程调试安装,确保顺利运行。
42 13
基于ssm的考研图书电子商务平台,附源码+数据库+论文
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
38 16
基于ssm的培训学校教学管理平台,附源码+数据库+论文
金旗帜文化培训学校网站项目包含管理员、教师和用户三种角色,各角色功能通过用例图展示。技术框架采用Java语言,B/S架构,前端为Vue+HTML+CSS+LayUI,后端为SSM,数据库为MySQL,运行环境为JDK8+Tomcat8.5。项目含12张数据库表,非前后端分离,支持演示视频与截图查看。购买后提供免费安装调试服务,确保顺利运行。
49 14
|
27天前
|
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
53 1
基于ssm的培训学校教学管理平台,附源码+数据库+论文
该项目为一培训学校教学管理平台,涵盖管理员、教师和学生三大功能模块。管理员可进行系统全面管理,包括学生、教师、课程等信息的增删改查;教师能管理个人中心、课程及选课信息;学生则可管理个人中心及选课信息。技术框架采用Java编程语言,基于B/S架构,前端使用Vue+HTML+JavaScript+CSS+LayUI,后端采用SSM框架,数据库为MySQL。项目运行环境为JDK8+MySQL5.7+Tomcat8.5,支持远程调试安装。演示视频与详细文档截图均提供下载链接。
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
78 19
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
71.7万/秒到1.4万/秒!数据库查询优化实战
在现代计算机系统中,程序的局部性原理是优化性能的关键。通过利用时间局部性和空间局部性,可以显著提升数据访问效率,减少高开销的操作如内存访问和网络 I/O。本文将探讨如何利用空间局部性原理,在实际案例中减少数据库查询量,并通过详细的监控和优化措施确保系统的稳定性和高效性。
71.7万/秒到1.4万/秒!数据库查询优化实战
|
3月前
|
陪玩平台中支付与结算模块的代码,陪玩系统数据库设计与代码实现
第三方支付平台对接涉及与微信支付、支付宝等API接口的调用,确保用户支付流程顺畅。结算模块根据业务规则计算陪玩师收益,强调安全性、异常处理、可扩展性和日志记录。数据库设计涵盖用户、陪玩者、订单等信息的存储管理,确保系统稳定运行。
110 12

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等