根據實例類型反射操作數據庫(簡單通用表操作類)

這個類適用簡單的表

1.有且只有id為主鍵,

2.并且實例類主鍵,也就是id應為字段,其他為屬性

3.實例類名跟表名一樣,字段屬性跟列名一樣

public class ProType{public int id;public string type{get;set;}public int array{get;set;}public string relyTpye{get;set;}public string etype{get;set;}}

  下面就是該類的實現

?

/// <summary>/// 排序枚舉/// </summary>public enum OrderType { asc, desc }public class SqlDAL<T> where T : new(){private PropertyInfo[] propertys;private List<string> nameList;public SqlDAL(){T t = new T();nameList = new List<string>();propertys = t.GetType().GetProperties();//MessageBox.Show(propertys.Length.ToString());foreach (var item in propertys){nameList.Add(item.Name);}}/// <summary>/// 查詢/// </summary>/// <returns></returns>public DataTable Select(){T t = new T();string sql = "select * from " + t.GetType().Name;DataTable dt = new DataTable();dt = DBHelper.GetInfo(sql);return dt;}/// <summary>/// 查詢/// </summary>/// <param name="orderType">排序</param>/// <param name="str">排序字段</param>/// <returns></returns>public DataTable Select(OrderType orderType, params string[] str){string orderStr = "";if (str.Length > 0){orderStr += " order by " + str[0];for (int i = 1; i < str.Length; i++){orderStr += "," + str[i];}orderStr += " " + orderType.ToString();}T t = new T();string sql = "select * from " + t.GetType().Name + orderStr;DataTable dt = DBHelper.GetInfo(sql);return dt;}/// <summary>////// </summary>/// <param name="t"></param>/// <returns></returns>public bool Insert(T t){List<SqlParameter> parm = new List<SqlParameter>();foreach (var item in propertys){SqlParameter parmitem = new SqlParameter(item.Name, item.GetValue(t, null));parm.Add(parmitem);}string strName = "";string strValue = "";strName += nameList[0];strValue += "@" + nameList[0];for (int i = 1; i < nameList.Count; i++){strName += "," + nameList[i];strValue += ",@" + nameList[i];}string sql = "insert into " + t.GetType().Name.ToString() + " (" + strName + ") values (" + strValue + ")";int isAdd = DBHelper.Commed(sql, parm.ToArray());if (isAdd > 0){return true;}else{return false;}}/// <summary>////// </summary>/// <param name="t"></param>/// <returns></returns>public bool Update(T t){List<SqlParameter> parm = new List<SqlParameter>();foreach (var item in propertys){SqlParameter parmitem = new SqlParameter(item.Name, item.GetValue(t, null));parm.Add(parmitem);}string str = "";str = nameList[0] + "=@" + nameList[0];for (int i = 1; i < nameList.Count; i++){str += "," + nameList[i] + "=@" + nameList[i];}string sql = "update " + t.GetType().Name + " set " + str + " where id=@id";int isUpdate = DBHelper.Commed(sql, parm.ToArray());if (isUpdate > 0){return true;}else{return false;}}/// <summary>////// </summary>/// <param name="id"></param>/// <returns></returns>public bool Delete(string id){T t = new T();string sql = "delete from " + t.GetType().Name + " where id=" + id;int isDelete = DBHelper.Commed(sql);if (isDelete > 0){return true;}else{return false;}}}

?

這里之所以有這個類,是因為操作這些表的代碼大同小異,甚至可以做出通用任意表,實例類可以用特征類來標識,做出字段與列名的相對應

但那種太過繁瑣,用來實現這些簡單表就有點大材小用,所有先弄出了這個類,如果后面有機會再實現以下任意表通用類

轉載于:https://www.cnblogs.com/lsgsanxiao/p/5732339.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React-引領未來的用戶界面開發框架-讀書筆記(五)

第11章 性能優化 Reactde Dom diff算法使我們能夠在任意時間點高效地重新繪制整個用戶界面&#xff0c;并保證最小程度的DOM改變&#xff0c;然而&#xff0c;也存在需要對組件進行細致優化的情況&#xff0c;這時就需要渲染一個新的DOM來讓應用運行得更加高效。 shouldCompone…

oneproxy檢測主從復制同步延遲

Q:為什么要實現讀寫分離延遲檢測&#xff1f; A:就好比你在ATM機存錢&#xff0c;你老婆收到短信后樂呵呵的拿網銀APP查看&#xff0c;結果錢沒過來。其實錢已經到賬了&#xff0c;只是查詢的ATM機節點錢還沒過來。所以我們dba要監控數據&#xff0c;一旦發現錢沒有復制到另一A…

.NET 分表分庫動態化處理

介紹本期主角:ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案&#xff0c;具有零依賴、零學習成本、零業務代碼入侵我不是efcore怎么辦這邊肯定有小伙伴要問有沒有不是efcore的,我這邊很確信的和你講有并且適應所有的ADO.NET包括sqlhelperShardingCo…

addEventListener 的事件函數的傳遞【轉載】

addEventListener 參數如下&#xff1a; addEventListener(type, listener[, useCapture]); type&#xff0c;事件名稱listener&#xff0c;事件處理器useCapture&#xff0c;是否捕獲一直把 listener 記成是響應函數&#xff0c;function 類型。相信很多人也是這么理解的。多數…

Android之elevation實現陰影效果

1 需求 需要控件實現陰影效果 2 實現 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"andr…

十、小程序實戰 (IVX 快速開發教程)

十、小程序實戰 使用小程序完成一個二手信息站點與 WebApp 實現流程類型&#xff0c;只是部分內容使用了微信小程序特有的組件&#xff0c;例如微信登錄與 WebApp 略有差別&#xff0c;其它邏輯實現較為類似。我們先制作頁面&#xff0c;之后再實現功能。 由于之前已經完成了…

【VB測繪程序設計】第一章 VB測繪程序設計概述

目 錄 第一節 測繪程序設計的意義 第二節 程序設計語言的發展 第三節 測繪程序設計語言的選擇

類屬性和實例屬性沖突

類屬性和實例屬性名字沖突怎么辦 修改類屬性會導致所有實例訪問到的類屬性全部都受影響&#xff0c;但是&#xff0c;如果在實例變量上修改類屬性會發生什么問題呢&#xff1f;class Person(object):address Earthdef __init__(self, name):self.name namep1 Person(Bob) p2…

源代碼下載 第六章 注解式控制器詳解

2019獨角獸企業重金招聘Python工程師標準>>> 源代碼請到附件中下載。 其他下載&#xff1a; 跟著開濤學SpringMVC 第一章源代碼下載 第二章 Spring MVC入門 源代碼下載 Controller接口控制器詳解 源代碼下載 源碼下載——第四章 Controller接口控制器詳解——跟著開…

Android6.0到底有什么不一樣

在android 6.0&#xff08;API 23&#xff09;中&#xff0c;Google已經移除了移除了Apache HttpClient相關的類 http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html 本文轉自屠夫章哥 51CTO博客&#xff0c;原文鏈接&#xff1a;…

WPF|快速添加新手引導功能(支持MVVM)

閱讀導航前言案例一案例二案例三&#xff08;本文介紹的方式&#xff09;如何使用&#xff1f;控件如何開發的&#xff1f;總結1. 前言案例一站長分享過 眾尋 大佬的一篇 WPF 簡易新手引導 一文&#xff0c;新手引導的效果挺不錯的&#xff0c;如下圖&#xff1a;該文給出的代碼…

三、界面介紹(IVX快速手冊)

三、集成開發環境界面介紹 通過本節你將了解 iVX 在線集成開發環境 界面&#xff0c;快速建立對 在線集成開發環境 的認識。 文章目錄三、集成開發環境界面介紹3.1 界面區域3.2 舞臺3.3 組件工具欄3.4 對象樹/素材面板3.5 屬性面板3.6 菜單面板3.7 邏輯工具面板3.8 輔助工具3.…

Android studio之提示Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46

1、錯誤提示如下 Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46 Show in Project Structure dialog Affected Modules: app2、解決辦法 在project的build.gradle里面加入 maven { url https://jitpack.io }

【VB測繪程序設計】第二章 VB測繪程序基礎

第一節 數據類型 VB中提供了以下11中基本的數據類型: 一、數值型 二、字符串 三、日期型 1.界面設計 2. 代碼 <

React-引領未來的用戶界面開發框架-讀書筆記(六)

第12章 服務端渲染 想讓搜索引擎抓取到你的站點&#xff0c;服務端渲染這一步不可或缺&#xff0c;服務端渲染還可以提升站點的性能&#xff0c;因為在加載JavaScript腳本的同時&#xff0c;瀏覽器就可以進行頁面渲染。 React的虛擬DOM是其可被用于服務端渲染的關鍵。首先每個R…

TrimPath - Js模板引擎

當頁面中引用template.js文件之后&#xff0c;腳本將創建一個TrimPath對象供你使用。 parseDOMTemplate(elementId,optionalDocument)  //獲得模板字符串代碼 得到頁面中Id為elementId的DOM組件的InnerHTML&#xff0c;將其解析成一個模板&#xff0c;這個返回一個templateOb…

appserv安裝

Appserv 官網: http://www.appservnetwork.com/ 安裝好后&#xff0c;輸入http://localhost:8082/驗證是否裝成功&#xff0c;成功后如下圖 http://localhost:8082/ 默認指定的文件夾是 進入到phpMyAdmin 的賬號是root&#xff0c;密碼是安裝時的密碼

一、iVX簡介(IVX 快速開發教程)

一、iVX簡介 通過本節你將對 iVX 有一個大致的認識&#xff0c;并且了解 iVX 能夠做些什么&#xff0c;有哪一些優勢&#xff0c;這將幫助你更好的上手 iVX 進行應用的開發&#xff0c;初步了解 iVX 的強大之處。 文章目錄一、iVX簡介1.1 iVX 是什么&#xff1f;1.2 iVX適合怎…

WPF效果第一百八十六篇之又玩ListBox

大周末的接著上一篇玩耍TreeView,這二天又再次去玩耍ListBox;畢竟是我的最愛,沒辦法就喜歡玩耍他;閑話也不多扯了,直接看咱們最終效果:2、原來一直ItemTemplate,這次直接ListBoxItem的Template:<Setter Property"Template"><Setter.Value><ControlTem…