当前位置: 代码网 > it编程>编程语言>C# > C#利用IDbCommand实现通用数据库脚本执行程序

C#利用IDbCommand实现通用数据库脚本执行程序

2024年05月26日 C# 我要评论
关于 executenonquery在.net 应用中,在数据库中执行脚本程序是经常用到的功能,如数据操作(新增、修改、删除等),执行一个存储过程等,实现的核心方法需要执行 command 对象的ex

关于 executenonquery

在.net 应用中,在数据库中执行脚本程序是经常用到的功能,如数据操作(新增、修改、删除等),执行一个存储过程等,实现的核心方法需要执行 command 对象的executenonquery方法。该方法对数据库连接执行 transact-sql 语句并返回受影响的行数。

生成数据集对象需要利用 ado.net 中的数据提供者对象包括idbconnection、idbcommand、idbdataparameter等,如何使用这些对象请参考这篇文章:c#实现idbconnection/idbcommand等相关通用数据接口_c#教程_代码网 (jb51.net)

本文将介绍如何通过利用idbcommand 实现通用数据库脚本执行程序。

数据库脚本程序的执行流程

首先需要创建连接对象,成功后下达符合对应数据库规范的命令指令,该指令可能包括需要的参数对象(需要定义名称和赋值等操作),通过 idbcommand 命令接口对象执行,大体流程如下图:

范例运行环境

操作系统: windows server 2019 datacenter

.net版本: .netframework4.7.1 或以上

开发工具:vs2019  c#

数据库:在这里我们以支持 oracle 9i、ms sql server 2016、国产达梦数据 8 为例

通用类的设计

引用

在实现方法前请引用如下代码:

using system.data;
using system.data.sqlclient;
using system.data.oracleclient;
using dm;
using system.collections;

dal类

创建一个 dal 数据操作类,该类设计如下:

序号成员类型说明
1public string connkeystring=""
        
属性访问在configurationsettings.appsettings[connkeystring]中存储的数据连接串,该关键字为优先选项,如果为空则访问 connstring 直接连接串
2public string connstring=""属性idbconnection对象的连接串,该属性仅到connkeystring为空时试图访问
3public string dbservertype=""
       
属性目前支持 "oracle"、 "dm8",其它字符串均视为 ms sql server
4public string errormessage=""
        
        
        
属性当执行脚本命令发生错误时捕捉到的错误信息
5public int rowscount=0属性当执行脚本命令成功后的影响行数,默认值为0
6public int errornum=0属性当执行脚本命令失败时,返回数据库提供的错误号
7public void execdbscripts(string _sql,arraylist paras,commandtype ct)方法execdbscripts 方法用于执行数据库脚本

execdbscripts 方法无返回值,均通过设置 errormessage、rowscount、errornum属性实现,其参数说明见下表:

序号参数名类型说明
2_sqlstring要执行的sql语句命令行
3parasarraylist

要赋值的参数对象,逐个添加到arraylist里,请注意参数为实体数据参数对象,如 ms sql server ,请传递如下代码:

arraylist.add(new sqlparameter("参数名",参数值)); 

ctcommandtype

system.data.commandtype 枚举,可包括:

storedprocedure(存储过程)
tabledirect(直接表查询)
text(文本查询)该值为默认值

有关 commandtype 的更多资料请参考如下链接:commandtype 枚举 (system.data) | microsoft learn

实现代码

dal类完整的实现代码如下:

public class codal
{
		public string connkeystring="janeconnection";
		public string connstring="";
		public string dbservertype= configurationsettings.appsettings["dbservertype"];
        public string errormessage="";
		public int rowscount=0;
		public int errornum=0;
 
		public void execdbscripts(string _sql,arraylist paras,commandtype ct)
		{
			string strconn =configurationsettings.appsettings[connkeystring];
			if(connstring!="")
			{
				strconn=connstring;
			}
			system.data.idbconnection conn=getconnection(dbservertype,strconn);
			system.data.idbcommand cmd=getcommand(dbservertype,_sql,paras,conn);
			cmd.commandtype=ct;
			cmd.commandtimeout=commandtimeout;
			try
			{
				conn.open();
				int i=cmd.executenonquery();
				rowscount=i;
			}
			catch (exception e)
			{
				if (e.gettype() ==typeof(system.data.sqlclient.sqlexception))
				{
					int errnumber = ((system.data.sqlclient.sqlexception)e).number;
					errornum = errnumber;
				}else if (e.gettype() == typeof(system.data.oracleclient.oracleexception))
                {
                    int errnumber = ((system.data.oracleclient.oracleexception)e).code;
                    errornum = errnumber;
                }
                else if (e.gettype() == typeof(dmexception))
                {
                    int errnumber = ((dmexception)e).number;
                    errornum = errnumber;
                }
				errormessage=rv[1];
				cmd.parameters.clear();
			}
			finally
			{
				if(conn.state==connectionstate.open)
				{
					conn.close();
				}
			}
		}
		public system.data.idbconnection getconnection(string dbservertype,string connectionstring)
		{
			idbconnection con = null;
			switch (dbservertype.tolower())
			{
				case "oracle":
					con = new oracleconnection(connectionstring);break;
                case "dm8":
                    con = new dmconnection(connectionstring); break;
                default:
					con = new sqlconnection(connectionstring);   break;
			}
			return con;
 
		}
		public idbcommand getcommand(string dbservertype,string cmdtext,arraylist paras,idbconnection con)
		{
			idbcommand cmd = null;
			switch (dbservertype.tolower())
			{
				case "oracle": cmd = new oraclecommand(cmdtext,(oracleconnection)con);
					break;
                case "dm8":
                    cmd = new dmcommand(cmdtext, (dmconnection)con);
                    break;
                default:    cmd = new sqlcommand(cmdtext,(sqlconnection)con);        break;
			}
			if(paras!=null)
			{
				for(int i=0;i<paras.count;i++)
				{
					cmd.parameters.add(getparameter(dbservertype,paras[i]));
				}
			}
			return cmd;
		}
        public system.data.idbdataparameter getparameter(string dbservertype,object paras)
		{
			idbdataparameter para = null;
			switch (dbservertype.tolower())
			{
 
				case "oracle": para =(oracleparameter)paras; 
					break;
                case "dm8":
                    para =  (dmparameter)paras;
                    break;
                default: para =(sqlparameter)paras; break;
			}
			return para;
		}
 
}

小结

到此这篇关于c#利用idbcommand实现通用数据库脚本执行程序的文章就介绍到这了,更多相关c# idbcommand数据库脚本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • 基于C#实现音乐文件的播放功能

    基于C#实现音乐文件的播放功能

    引言在现代软件开发中,音乐播放功能是一个常见的需求。本文将介绍如何使用c#编写一个简单的程序来实现音乐文件的播放功能。我们将使用windowsmediaplay... [阅读全文]
  • C#通过子窗体刷新父窗体的实现方法

    1、实现方法实现通过子窗体刷新父窗体时,主要通过在自定义事件中执行数据绑定来对主窗体进行刷新,即当子窗体产生更新操作时,通过子窗体的一个方法触发主窗体中对应的事件,这个过程主要用到…

    2024年05月26日 编程语言
  • C#中环境变量示例详解

    C#中环境变量示例详解

    什么是环境变量环境变量是操作系统中存储的一种机制,用于保存与操作系统环境和应用程序运行相关的配置信息。它们是一组键值对,其中每个键都对应一个特定的配置项,而键对... [阅读全文]
  • C#实现鼠标拖拽无边框浮动窗体的方法

    C#实现鼠标拖拽无边框浮动窗体的方法

    介绍一般情况下,在标题栏中按住鼠标左键不放即可实现拖动操作。当做浮动窗体时,如果包含窗体边框,那么界面给使用者的感觉将很不友好,因此浮动窗体没有边框,但对于这种... [阅读全文]
  • C# 中类型转换方式之显式转换和 as 运算符

    C# 中类型转换方式之显式转换和 as 运算符

    在 c# 中,有两种常见的类型转换方式:显式转换和as 运算符。它们用于在不同类型之间进行转换。以下是对这两种转换方式的详细解释和示例说明:显式转换:显式转换是... [阅读全文]
  • C# GetField方法的应用实例讲解

    C# GetField方法的应用实例讲解

    关于 c#type类type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 this.g... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com