最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#利用IDbCommand實現(xiàn)通用數(shù)據(jù)庫腳本執(zhí)行程序

 更新時間:2024年04月29日 11:11:34   作者:初九之潛龍勿用  
在.net 應(yīng)用中,在數(shù)據(jù)庫中執(zhí)行腳本程序是經(jīng)常用到的功能,如數(shù)據(jù)操作(新增、修改、刪除等),執(zhí)行一個存儲過程等,本文將介紹如何通過利用IDbCommand 實現(xiàn)通用數(shù)據(jù)庫腳本執(zhí)行程序,感興趣的朋友可以參考下

關(guān)于 ExecuteNonQuery

在.net 應(yīng)用中,在數(shù)據(jù)庫中執(zhí)行腳本程序是經(jīng)常用到的功能,如數(shù)據(jù)操作(新增、修改、刪除等),執(zhí)行一個存儲過程等,實現(xiàn)的核心方法需要執(zhí)行 Command 對象的ExecuteNonQuery方法。該方法對數(shù)據(jù)庫連接執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。

生成數(shù)據(jù)集對象需要利用 ADO.NET 中的數(shù)據(jù)提供者對象包括IDbConnection、IDbCommand、IDbDataParameter等,如何使用這些對象請參考這篇文章:C#實現(xiàn)IDbConnection/IDbCommand等相關(guān)通用數(shù)據(jù)接口_C#教程_腳本之家 (jb51.net)

本文將介紹如何通過利用IDbCommand 實現(xiàn)通用數(shù)據(jù)庫腳本執(zhí)行程序。

數(shù)據(jù)庫腳本程序的執(zhí)行流程

首先需要創(chuàng)建連接對象,成功后下達(dá)符合對應(yīng)數(shù)據(jù)庫規(guī)范的命令指令,該指令可能包括需要的參數(shù)對象(需要定義名稱和賦值等操作),通過 IDbCommand 命令接口對象執(zhí)行,大體流程如下圖:

范例運行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

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

開發(fā)工具:VS2019  C#

數(shù)據(jù)庫:在這里我們以支持 Oracle 9i、MS SQL Server 2016、國產(chǎn)達(dá)夢數(shù)據(jù) 8 為例

通用類的設(shè)計

引用

在實現(xiàn)方法前請引用如下代碼:

using System.Data;
using System.Data.SqlClient;
using System.Data.OracleClient;
using Dm;
using System.Collections;

DAL類

創(chuàng)建一個 DAL 數(shù)據(jù)操作類,該類設(shè)計如下:

序號成員類型說明
1public string ConnKeyString=""
        
屬性訪問在ConfigurationSettings.AppSettings[ConnKeyString]中存儲的數(shù)據(jù)連接串,該關(guān)鍵字為優(yōu)先選項,如果為空則訪問 ConnString 直接連接串
2public string ConnString=""屬性IdbConnection對象的連接串,該屬性僅到ConnKeyString為空時試圖訪問
3public string DbServerType=""
       
屬性目前支持 "oracle"、 "dm8",其它字符串均視為 MS SQL Server
4public string ErrorMessage=""
        
        
        
屬性當(dāng)執(zhí)行腳本命令發(fā)生錯誤時捕捉到的錯誤信息
5public int RowsCount=0屬性當(dāng)執(zhí)行腳本命令成功后的影響行數(shù),默認(rèn)值為0
6public int ErrorNum=0屬性當(dāng)執(zhí)行腳本命令失敗時,返回數(shù)據(jù)庫提供的錯誤號
7public void ExecDbScripts(string _sql,ArrayList paras,CommandType ct)方法ExecDbScripts 方法用于執(zhí)行數(shù)據(jù)庫腳本

ExecDbScripts 方法無返回值,均通過設(shè)置 ErrorMessage、RowsCount、ErrorNum屬性實現(xiàn),其參數(shù)說明見下表:

序號參數(shù)名類型說明
2_sqlstring要執(zhí)行的SQL語句命令行
3parasArrayList

要賦值的參數(shù)對象,逐個添加到ArrayList里,請注意參數(shù)為實體數(shù)據(jù)參數(shù)對象,如 MS SQL Server ,請傳遞如下代碼:

ArrayList.Add(new SqlParameter("參數(shù)名",參數(shù)值)); 

ctCommandType

System.Data.CommandType 枚舉,可包括:

StoredProcedure(存儲過程)
TableDirect(直接表查詢)
Text(文本查詢)該值為默認(rèn)值

有關(guān) CommandType 的更多資料請參考如下鏈接:CommandType 枚舉 (System.Data) | Microsoft Learn

實現(xiàn)代碼

DAL類完整的實現(xiàn)代碼如下:

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

小結(jié)

到此這篇關(guān)于C#利用IDbCommand實現(xiàn)通用數(shù)據(jù)庫腳本執(zhí)行程序的文章就介紹到這了,更多相關(guān)C# IDbCommand數(shù)據(jù)庫腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#操作windows注冊表的方法

    C#操作windows注冊表的方法

    這篇文章主要介紹了C#操作windows注冊表的方法,涉及C#針對注冊表的讀取與寫入技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c# 并行和多線程編程——認(rèn)識Parallel

    c# 并行和多線程編程——認(rèn)識Parallel

    這篇文章主要介紹了c# 并行和多線程編程的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c# Parallel的相關(guān)知識,感興趣的朋友可以了解下
    2021-02-02
  • C#使用Win2D在UWP程序中實現(xiàn)2D繪圖

    C#使用Win2D在UWP程序中實現(xiàn)2D繪圖

    這篇文章介紹了C#使用Win2D在UWP程序中實現(xiàn)2D繪圖的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用C#自動化生成Excel單元格數(shù)據(jù)驗證

    使用C#自動化生成Excel單元格數(shù)據(jù)驗證

    在日常報表開發(fā)中,Excel 的數(shù)據(jù)準(zhǔn)確性和可控性與格式美觀同樣重要,本文將演示如何在 同一個工作表中 設(shè)置 下拉列表、數(shù)值范圍、日期區(qū)間、文本長度、自定義公式和輸入提示,有需要的小伙伴可以了解下
    2025-09-09
  • C#控制臺基礎(chǔ) list<>初始化的兩種方法

    C#控制臺基礎(chǔ) list<>初始化的兩種方法

    這篇文章主要介紹了C#控制臺基礎(chǔ) list<>初始化的兩種方法,需要的朋友可以參考下
    2016-12-12
  • C#中反射和擴展方法如何運用

    C#中反射和擴展方法如何運用

    這篇文章主要為大家詳細(xì)介紹了C#中反射和擴展方法的運用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了C#請求http向網(wǎng)頁發(fā)送數(shù)據(jù)、網(wǎng)頁接收的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#使用隨機數(shù)編寫班級點名器的示例代碼

    C#使用隨機數(shù)編寫班級點名器的示例代碼

    本文主要介紹了C#使用隨機數(shù)編寫班級點名器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#多播委托的實現(xiàn)示例

    C#多播委托的實現(xiàn)示例

    C#中的多播委托是一種特殊的委托類型,可以持有多個方法的引用,并在調(diào)用時依次執(zhí)行這些方法,本文就來介紹一下C#多播委托的實現(xiàn)示例,感興趣的可以了解一下
    2025-12-12
  • C#使用TimeSpan時間計算的簡單實現(xiàn)

    C#使用TimeSpan時間計算的簡單實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C#使用TimeSpan時間計算的相關(guān)資料,以及通過一個實例代碼給大家介紹了C#使用timespan和timer完成一個簡單的倒計時器的方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06

最新評論

遵义县| 安岳县| 盖州市| 罗甸县| 鹤山市| 兰考县| 南充市| 芜湖县| 广宁县| 屯门区| 河源市| 葵青区| 大同县| 霍邱县| 汤阴县| 永新县| 宁陕县| 阿拉善盟| 高清| 大同市| 通化县| 清新县| 平安县| 永和县| 隆化县| 论坛| 黄龙县| 黄骅市| 特克斯县| 南召县| 越西县| 合江县| 东宁县| 土默特右旗| 宜都市| 阳新县| 宜春市| 柞水县| 全州县| 临漳县| 龙里县|