反射+自定义属性拼接sql
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
? <appSettings>
?
??? <add key="StrConn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/Access/changqing.mdb;Persist Security Info=True"/>
?
? </appSettings>
</configuration>
?
?
?
?public class AuthorAttribute:Attribute
??? {
??????? public string name;
??????? public string codeName;
??????? public string dataType;
??????? public string dataWidth;
??????? public string dataPrecision;
??? }
??? [AttributeUsageAttribute(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
??? public class TableAttribute : Attribute
??? {
??????? private string name;
???????
??????? //保存表名的字段
??????? private string _tableName;
??????? public TableAttribute()
??????? {
??????? }
??????? public TableAttribute(string name, string tableName)
??????? {
??????????? this.name = name;
??????????? this._tableName = tableName;
??????? }
??????? /// <summary>
??????? /// 映射的表名(表的全名:模式名.表名)
??????? /// </summary>
??????? public string TableName
??????? {
??????????? set
??????????? {
??????????????? this._tableName = value;
??????????? }
??????????? get
??????????? {
??????????????? return this._tableName;
??????????? }
??????? }
??????? public string Name
??????? {
??????????? get { return name; }
??????????? set { name = value; }
??????? }
??? }
??? public class DataClass
??? {
??????? [Table("鉆井基本數據","WEBSYSOLD_E001")]
??????? public class E001
??????? {
??????????? #region? 字段定義
??????????? private string jh;?????? //井號
??????????? private string dlwz;???? //地理位置
??????????? private string gzwz;???? //構造位置
??????????? private string sywz;????? //水域位置
??????????? private string dmhb;????? //地面海拔
??????????? private string jb;???????? //井別
??????????? private string jx;????????? //井型
??????????? private string zjfs;??????? //鉆井方式
??????????? private string jkzzbx;????? //井口縱坐標X
??????????? private string jkhzby;????? //井口橫坐標Y
??????????? private string zymdc;?????? //主要目的層
??????????? private string ktbl;??????? //勘探類別
??????????? #endregion
??????????? #region? 屬性定義
??????????? [Author(name ="井號", codeName ="JH", dataType="C", dataWidth="16")]
??????????? public string Jh
??????????? {
??????????????? get { return jh; }
??????????????? set { jh = value; }
??????????? }
??????????? [Author(name = "地理位置", codeName = "DLWZ", dataType = "C", dataWidth = "50")]
??????????? public string Dlwz
??????????? {
??????????????? get { return dlwz; }
??????????????? set { dlwz = value; }
??????????? }
??????????? [Author(name = "構造位置", codeName = "GZWZ", dataType = "C", dataWidth = "50")]
??????????? public string Gzwz
??????????? {
??????????????? get { return gzwz; }
??????????????? set { gzwz = value; }
??????????? }
??????????? [Author(name = "水域位置", codeName = "SYWZ", dataType = "C", dataWidth = "40")]
??????????? public string Sywz
??????????? {
??????????????? get { return sywz; }
??????????????? set { sywz = value; }
??????????? }
??????????? [Author(name = "地面海拔", codeName = "DMHB", dataType = "N", dataWidth = "6",dataPrecision="2")]
??????????? public string Dmhb
??????????? {
??????????????? get { return dmhb; }
??????????????? set { dmhb = value; }
??????????? }
??????????? [Author(name = "井別", codeName = "JB", dataType = "C", dataWidth = "10")]
??????????? public string Jb
??????????? {
??????????????? get { return jb; }
??????????????? set { jb = value; }
??????????? }
??????????? [Author(name = "井型", codeName = "JX", dataType = "C", dataWidth = "10")]
??????????? public string Jx
??????????? {
??????????????? get { return jx; }
??????????????? set { jx = value; }
??????????? }
??????????? [Author(name = "鉆井方式", codeName = "ZJFS", dataType = "C", dataWidth = "14")]
??????????? public string Zjfs
??????????? {
??????????????? get { return zjfs; }
??????????????? set { zjfs = value; }
??????????? }
??????????? [Author(name = "井口縱坐標X", codeName = "JKZZBX", dataType = "N", dataWidth = "10",dataPrecision="2")]
??????????? public string Jkzzbx
??????????? {
??????????????? get { return jkzzbx; }
??????????????? set { jkzzbx = value; }
??????????? }
??????????? [Author(name = "井口橫坐標Y", codeName = "JKHZBY", dataType = "N", dataWidth = "11", dataPrecision = "2")]
??????????? public string Jkhzby
??????????? {
??????????????? get { return jkhzby; }
??????????????? set { jkhzby = value; }
??????????? }
??????????? [Author(name = "主要目的層", codeName = "ZYMDC", dataType = "C", dataWidth = "40")]
??????????? public string Zymdc
??????????? {
??????????????? get { return zymdc; }
??????????????? set { zymdc = value; }
??????????? }
??????????? [Author(name = "勘探類別", codeName = "KTLB", dataType = "C", dataWidth = "50")]
??????????? public string Ktbl
??????????? {
??????????????? get { return ktbl; }
??????????????? set { ktbl = value; }
??????????? }
??????????? #endregion
??????? }
??????? [Table("鉆井完井基本數據","WEBSYSOLD_E002")]
??????? public class E002
??????? {
??????????? #region? 字段定義
??????????? private string jh;????? //井號
??????????? private string zjsgdw;?? //鉆井施工單位
??????????? private string kzrq;????? //開鉆日期
??????????? private string wzrq;???? //完鉆日期
??????????? private string wjrq;???? //完井日期
??????????? private string bxhb;???? //補心海拔
??????????? private string wzjs;???? //完鉆井深
??????????? private string wzcw;???? //完鉆層位
??????????? private string jj;?????? //井徑
??????????? private string ybj;????? //油補距
??????????? private string tbj;????? //套補距
??????????? private string rgjd;???? //人工井底
??????????? private string snsfsd;?? //水泥上返深度
??????????? private string jdwy;???? //井底位移
??????????? private string wyfw;????? //位移方位
??????????? private string gjzl;????? //固井質量
??????????? private string wjff;????? //完井方法代碼
??????????? #endregion
??????????? #region? 屬性定義
??????????? [Author(name = "井號", codeName = "JH", dataType = "C", dataWidth = "16")]
??????????? public string Jh
??????????? {
??????????????? get { return jh; }
??????????????? set { jh = value; }
??????????? }
??????????? [Author(name = "鉆井施工單位", codeName = "ZJSGDW", dataType = "C", dataWidth = "40")]
??????????? public string Zjsgdw
??????????? {
??????????? get { return zjsgdw; }
??????????? set { zjsgdw = value; }
??????????? }
??????????? [Author(name = "開鉆日期", codeName = "KZRQ", dataType = "D")]
??????????? public string Kzrq
??????????? {
??????????????? get { return kzrq; }
??????????????? set { kzrq = value; }
??????????? }
??????????? [Author(name = "完鉆日期", codeName = "WZRQ", dataType = "D")]
??????????? public string Wzrq
??????????? {
??????????????? get { return wzrq; }
??????????????? set { wzrq = value; }
??????????? }
??????????? [Author(name = "完井日期", codeName = "WJRQ", dataType = "D")]
??????????? public string Wjrq
??????????? {
??????????????? get { return wjrq; }
??????????????? set { wjrq = value; }
??????????? }
??????????? [Author(name = "補心海拔", codeName = "BXHB", dataType = "N", dataWidth = "7",dataPrecision="2")]
??????????? public string Bxhb
??????????? {
??????????????? get { return bxhb; }
??????????????? set { bxhb = value; }
??????????? }
??????????? [Author(name = "完鉆井深", codeName = "WZJS", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Wzjs
??????????? {
??????????????? get { return wzjs; }
??????????????? set { wzjs = value; }
??????????? }
??????????? [Author(name = "完鉆層位", codeName = "WZCW", dataType = "C", dataWidth = "20")]
??????????? public string Wzcw
??????????? {
??????????????? get { return wzcw; }
??????????????? set { wzcw = value; }
??????????? }
??????????? [Author(name = "井徑", codeName = "JJ", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Jj
??????????? {
??????????????? get { return jj; }
??????????????? set { jj = value; }
??????????? }
??????????? [Author(name = "油補距", codeName = "YBJ", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Ybj
??????????? {
??????????????? get { return ybj; }
??????????????? set { ybj = value; }
??????????? }
??????????? [Author(name = "套補距", codeName = "TBJ", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Tbj
??????????? {
??????????????? get { return tbj; }
??????????????? set { tbj = value; }
??????????? }
??????????? [Author(name = "人工井底", codeName = "RGJD", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Rgjd
??????????? {
??????????????? get { return rgjd; }
??????????????? set { rgjd = value; }
??????????? }
??????????? [Author(name = "水泥上返深度", codeName = "SNSFSD", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Snsfsd
??????????? {
??????????????? get { return snsfsd; }
??????????????? set { snsfsd = value; }
??????????? }
??????????? [Author(name = "井底位移", codeName = "JDWY", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Jdwy
??????????? {
??????????????? get { return jdwy; }
??????????????? set { jdwy = value; }
??????????? }
??????????? [Author(name = "位移方位", codeName = "WYFW", dataType = "N", dataWidth = "6", dataPrecision = "2")]
??????????? public string Wyfw
??????????? {
??????????????? get { return wyfw; }
??????????????? set { wyfw = value; }
??????????? }
??????????? [Author(name = "固井質量", codeName = "GJZL", dataType = "C", dataWidth = "8")]
??????????? public string Gjzl
??????????? {
??????????????? get { return gjzl; }
??????????????? set { gjzl = value; }
??????????? }
??????????? [Author(name = "完井方法代碼", codeName = "WJFF", dataType = "C", dataWidth = "2")]
??????????? public string Wjff
??????????? {
??????????????? get { return wjff; }
??????????????? set { wjff = value; }
??????????? }
??????????? #endregion
??????? }
??????? [Table("套管程序數據","WEBSYSOLD_E004")]
??????? public class E004
??????? {
??????????? #region
??????????? private string jh;? //井號
??????????? private string tgmc; //套管名稱
??????????? private string tgwj; //套管外徑
??????????? private string ldjfr; //聯頂節方入
??????????? private string cxdw;? //磁性定位
??????????? private string fzqgs; //扶正器個數
??????????? private string xrjs;? //下入井深
??????????? private string tbj;?? //套補距
??????????? private string tgzc;? //套管總長
??????????? private string zlhsd1; //阻流環深度11
??????????? private string zlhsd2; //阻流環深度2
??????????? private string zlhsd3; //阻流環深度3
??????????? #endregion
??????????? #region
??????????? [Author(name = "井號", codeName = "JH", dataType = "C", dataWidth = "16")]
??????????? public string Jh
??????????? {
??????????????? get { return jh; }
??????????????? set { jh = value; }
??????????? }
??????????? [Author(name = "套管名稱", codeName = "TGMC", dataType = "C", dataWidth = "12")]
??????????? public string Tgmc
??????????? {
??????????????? get { return tgmc; }
??????????????? set { tgmc = value; }
??????????? }
???????
??????????? [Author(name = "套管外徑", codeName = "TGWJ", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Tgwj
??????????? {
??????????????? get { return tgwj; }
??????????????? set { tgwj = value; }
??????????? }
??????????? [Author(name = "聯頂節方入", codeName = "LDJFR", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Ldjfr
??????????? {
??????????????? get { return ldjfr; }
??????????????? set { ldjfr = value; }
??????????? }
??????????? [Author(name = "磁性定位", codeName = "CXDW", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Cxdw
??????????? {
??????????????? get { return cxdw; }
??????????????? set { cxdw = value; }
??????????? }
??????????? [Author(name = "扶正器個數", codeName = "FZQGS", dataType = "N", dataWidth = "2")]
??????????? public string Fzqgs
??????????? {
??????????????? get { return fzqgs; }
??????????????? set { fzqgs = value; }
??????????? }
??????????? [Author(name = "下入井深", codeName = "XRJS", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Xrjs
??????????? {
??????????????? get { return xrjs; }
??????????????? set { xrjs = value; }
??????????? }
??????????? [Author(name = "套補距", codeName = "TBJ", dataType = "N", dataWidth = "5", dataPrecision = "2")]
??????????? public string Tbj
??????????? {
??????????????? get { return tbj; }
??????????????? set { tbj = value; }
??????????? }
??????????? [Author(name = "套管總長", codeName = "TGZC", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Tgzc
??????????? {
??????????????? get { return tgzc; }
??????????????? set { tgzc = value; }
??????????? }
??????????? [Author(name = "阻流環深度1", codeName = "ZLHSD1", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Zlhsd1
??????????? {
??????????????? get { return zlhsd1; }
??????????????? set { zlhsd1 = value; }
??????????? }
??????????? [Author(name = "阻流環深度2", codeName = "ZLHSD2", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Zlhsd2
??????????? {
??????????????? get { return zlhsd2; }
??????????????? set { zlhsd2 = value; }
??????????? }
??????????? [Author(name = "阻流環深度3", codeName = "ZLHSD3", dataType = "N", dataWidth = "7", dataPrecision = "2")]
??????????? public string Zlhsd3
??????????? {
??????????????? get { return zlhsd3; }
??????????????? set { zlhsd3 = value; }
??????????? }
??????????? #endregion
??????? }
??????
??? }
?
?
?
??? public class TableInfo
??? {
??????? private Type type;
??????? private string name;
??????? private string codeName;
??????? public string CodeName
??????? {
??????????? get { return codeName; }
??????????? set { codeName = value; }
??????? }
?
??????? public string Name
??????? {
??????????? get { return name; }
??????????? set { name = value; }
??????? }
??????? public Type Type
??????? {
??????????? get { return type; }
??????????? set { type = value; }
??????? }
??? }
??? /// <summary>
??? /// 表信息類
??? /// </summary>
??? public class ReflectionData
??? {
???????
??????? private TableInfo tb_Info;
??????? private ArrayList tableInfos = new ArrayList();
??????? private ArrayList fieldInfos = new ArrayList();
??????? /// <summary>
??????? /// 表字段信息組
??????? /// </summary>
??????? public ArrayList FieldInfos
??????? {
??????????? get { return fieldInfos; }
??????????? set { fieldInfos = value; }
??????? }
??????? /// <summary>
??????? /// 表信息組
??????? /// </summary>
??????? public ArrayList TableInfos
??????? {
??????????? get { return tableInfos; }
??????????? set { tableInfos = value; }
??????? }
??????? /// <summary>
??????? /// 根據字符串反射類型集
??????? /// </summary>
??????? /// <param name="str"></param>
??????? public void GetTableNames(string str)
??????? {
??????????? Assembly asm = Assembly.Load(str);
??????????? Type[] type = asm.GetTypes();
??????????? foreach (Type temp in type)
??????????? {
???????????????????????????
??????????????? TableAttribute[] attributes = (TableAttribute[])temp.GetCustomAttributes(typeof(TableAttribute), false);
??????????????? if (attributes.Length == 1)
??????????????? {
??????????????????? tb_Info = new TableInfo();
??????????????????? tb_Info.Type = temp;
??????????????????? tb_Info.Name = attributes[0].Name;
??????????????????? tb_Info.CodeName = attributes[0].TableName;
??????????????????? tableInfos.Add(tb_Info);
??????????????? }
??????????? }
??????? }
??????? /// <summary>
??????? /// 根據類型得到屬性自定義屬性信息
??????? /// </summary>
??????? /// <param name="type"></param>
??????? public void GetFieldNames(Type type)
??????? {
??????????? PropertyInfo[] myProperty = type.GetProperties();
?????????
??????????? foreach (PropertyInfo property in myProperty)
??????????? {
??????????????? AuthorAttribute[] p_Temp=( AuthorAttribute[])property.GetCustomAttributes(typeof( AuthorAttribute), false);
??????????????? if (p_Temp.Length == 1)
??????????????? {
??????????????????? fieldInfos.Add(p_Temp);
??????????????? }
??????????? }
???????????
??????? }
?
??? }
?
?
?
?
?public? interface IDataAccess
??? {
?????? int SelectFullId(ref ArrayList list);
?????? int SelectInfo(ref ArrayList list, string id);
?????? int SelectInfo(ref ArrayList list, ArrayList m_list);
?????? int SelectFullInfo(ref ArrayList list);
??? }
?? public class OperateAccess : IDataAccess
?? {
??????? #region 聲明操作對象
?????? /// <summary>
?????? ///
?????? /// </summary>
?????? public ReflectionData RefData = new ReflectionData();
?????? /// <summary>
?????? /// 記錄當前表名
?????? /// </summary>
?????? public string nowTable = null;
???????
??????? /// <summary>
??????? /// 聲明連接對象
??????? /// </summary>
??????? protected OleDbConnection oleConn=null;
??????? /// <summary>
??????? /// 命令對象
??????? /// </summary>
??????? protected OleDbCommand oleCmd=null;
??????? /// <summary>
??????? /// 適配器對象
??????? /// </summary>
??????? protected OleDbDataAdapter oleDataAdapter=null;
??????? /// <summary>
??????? /// 讀取器對象
??????? /// </summary>
??????? protected OleDbDataReader oleDataReader = null;
??????? #endregion
??????? /// <summary>
??????? /// 打開數據庫連接
??????? /// </summary>
??????? /// <param name="strCon">連接字符串</param>
??????? /// <returns>操作是否成功</returns>
??????? public int OpenConnection()
??????? {
??????????? try
??????????? {
??????????????? if (oleConn.State == ConnectionState.Closed)
??????????????? {
????????????????
??????????????????? this.oleConn.Open();
??????????????? }
??????????????? return 0;
??????????? }
??????????? catch
??????????? {
??????????????? return -1;
??????????? }
??????? }
??????? /// <summary>
??????? /// 關閉數據庫連接
??????? /// </summary>
??????? /// <returns>操作是否成功</returns>
??????? public int CloseConnection()
??????? {
??????????? try
??????????? {
??????????????? if (oleConn.State == ConnectionState.Open)
??????????????? {
??????????????????? oleConn.Close();
??????????????? }
??????????????? return 0;
??????????? }
??????????? catch
??????????? {
??????????????? return -1;
??????????? }
??????? }
??????? /// <summary>
??????? /// 數據庫是否連接
??????? /// </summary>
??????? public bool IsDbopen
??????? {
??????????? get
??????????? {
??????????????? return oleConn.State == ConnectionState.Open ? true : false;
??????????? }
??????? }
????
??????? #region 默認構造函數
??????? /// <summary>
??????? /// 默認構造函數
??????? /// </summary>
??????? public OperateAccess()
??????? {
??????????? oleConn = new OleDbConnection(ConfigurationSettings.AppSettings["StrConn"].ToString());
??????????? oleCmd = new OleDbCommand();
??????? }
??????? #endregion
??????? #region IDataAccess 成員
??????? public int SelectFullId(ref ArrayList list)
??????? {
??????????? if (nowTable != null)
??????????? {
??????????????? StringBuilder sb = new StringBuilder();
??????????????? AuthorAttribute[] a_temp = (AuthorAttribute[])RefData.FieldInfos[0];
??????????????? sb.Append("select " + a_temp[0].codeName + " from " + nowTable);
??????????????? if (oleConn.State == ConnectionState.Closed)
??????????????? {
??????????????????? oleConn.Open();
??????????????? }
??????????????? oleCmd.Connection = oleConn;
??????????????? oleCmd.CommandType = CommandType.Text;
??????????????? oleCmd.CommandText = sb.ToString(); ;
??????????????? oleDataReader = oleCmd.ExecuteReader();
??????????????? while (oleDataReader.Read())
??????????????? {
??????????????????? object[] values = new object[oleDataReader.FieldCount];
??????????????????? oleDataReader.GetValues(values);
??????????????????? list.Add(values);
??????????????? }
??????????????? oleDataReader.Dispose();
??????????????? oleConn.Close();
??????????????? return 0;
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????????? return -1;
??????????? }
??????? }
?????
??????? public int SelectInfo(ref ArrayList list, string id)
??????? {
??????????? if (nowTable != null)
??????????? {
??????????????? StringBuilder sb = new StringBuilder();
???????????????
??????????????? AuthorAttribute[] a_temp = (AuthorAttribute[])RefData.FieldInfos[0];
??????????????? sb.Append("select ");
??????????????? for (int i = 0; i < RefData.FieldInfos.Count; i++)
??????????????? {
??????????????????? if (RefData.FieldInfos[i] is AuthorAttribute[])
??????????????????? {
??????????????????????
??????????????????????? AuthorAttribute[] temp = (AuthorAttribute[])RefData.FieldInfos[i];
??????????????????????? sb.Append(temp[0].codeName);
??????????????????????? if (i != RefData.FieldInfos.Count - 1)
??????????????????????? {
??????????????????????????? sb.Append(",");
??????????????????????? }
??????????????????? }
??????????????????
??????????????? }
???????????????
??????????????? sb.Append(" from " + nowTable);
??????????????? sb.Append(" where " + a_temp[0].codeName + "=" + "'"+id+"'");
??????????????? if (oleConn.State == ConnectionState.Closed)
??????????????? {
??????????????????? oleConn.Open();
??????????????? }
??????????????? oleCmd.Connection = oleConn;
??????????????? oleCmd.CommandType = CommandType.Text;
??????????????? oleCmd.CommandText = sb.ToString(); ;
??????????????? oleDataReader = oleCmd.ExecuteReader();
??????????????? while (oleDataReader.Read())
??????????????? {
??????????????????? object[] values = new object[oleDataReader.FieldCount];
??????????????????? oleDataReader.GetValues(values);
??????????????????? list.Add(values);
??????????????? }
??????????????? oleDataReader.Dispose();
??????????????? oleConn.Close();
??????????????? return 0;
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????????? return -1;
??????????? }
??????? }
??????? public int SelectInfo(ref ArrayList list, ArrayList m_list)
??????? {
??????????? if (nowTable != null)
??????????? {
??????????????? StringBuilder sb = new StringBuilder();
??????????????? AuthorAttribute[] a_temp = (AuthorAttribute[])RefData.FieldInfos[0];
??????????????? foreach (object str in m_list)
??????????????? {
??????????????????? sb.Remove(0, sb.Length);
??????????????????? sb.Append("select ");
??????????????????? for (int i = 0; i < RefData.FieldInfos.Count; i++)
??????????????????? {
??????????????????????? if (RefData.FieldInfos[i] is AuthorAttribute[])
??????????????????????? {
??????????????????????????? AuthorAttribute[] temp = (AuthorAttribute[])RefData.FieldInfos[i];
??????????????????????????? sb.Append(temp[0].codeName);
??????????????????????????? if (i != RefData.FieldInfos.Count - 1)
??????????????????????????? {
??????????????????????????????? sb.Append(",");
??????????????????????????? }
??????????????????????? }
??????????????????? }
??????????????????? sb.Append(" from " + nowTable);
??????????????????? sb.Append(" where " + a_temp[0].codeName + "=" + "'" + str.ToString() + "'");
??????????????????? if (oleConn.State == ConnectionState.Closed)
??????????????????? {
??????????????????????? oleConn.Open();
??????????????????? }
??????????????????? oleCmd.Connection = oleConn;
??????????????????? oleCmd.CommandType = CommandType.Text;
??????????????????? oleCmd.CommandText = sb.ToString(); ;
??????????????????? oleDataReader = oleCmd.ExecuteReader();
??????????????????? while (oleDataReader.Read())
??????????????????? {
??????????????????????? object[] values = new object[oleDataReader.FieldCount];
??????????????????????? oleDataReader.GetValues(values);
??????????????????????? list.Add(values);
??????????????????? }
??????????????????? oleDataReader.Dispose();
??????????????????? oleConn.Close();
??????????????? }
??????????????
??????????????
??????????????? return 0;
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????????? return -1;
??????????? }
??????? }
??????? public int SelectFullInfo(ref ArrayList list)
??????? {
??????????? if (nowTable != null)
??????????? {
??????????????? StringBuilder sb = new StringBuilder();
??????????????? AuthorAttribute[] a_temp = (AuthorAttribute[])RefData.FieldInfos[0];
??????????????? sb.Append("select ");
??????????????? for (int i = 0; i < RefData.FieldInfos.Count; i++)
??????????????? {
??????????????????? if (RefData.FieldInfos[i] is AuthorAttribute[])
??????????????????? {
??????????????????????? AuthorAttribute[] temp = (AuthorAttribute[])RefData.FieldInfos[i];
??????????????????????? sb.Append(temp[0].codeName);
??????????????????????? if (i != RefData.FieldInfos.Count - 1)
??????????????????????? {
??????????????????????????? sb.Append(",");
??????????????????????? }
??????????????????? }
??????????????? }
??????????????? sb.Append(" from " + nowTable);
??????????????? if (oleConn.State == ConnectionState.Closed)
??????????????? {
??????????????????? oleConn.Open();
??????????????? }
??????????????? oleCmd.Connection = oleConn;
??????????????? oleCmd.CommandType = CommandType.Text;
??????????????? oleCmd.CommandText = sb.ToString(); ;
??????????????? oleDataReader = oleCmd.ExecuteReader();
??????????????? while (oleDataReader.Read())
??????????????? {
??????????????????? object[] values = new object[oleDataReader.FieldCount];
??????????????????? oleDataReader.GetValues(values);
??????????????????? list.Add(values);
??????????????? }
??????????????? oleDataReader.Dispose();
??????????????? oleConn.Close();
??????????????? return 0;
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????????? return -1;
??????????? }
??????? }
??????? #endregion
?? }
?
?
?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace WindowsForms827
{
??? public partial class Form1 : Form
??? {
??????? public Form1()
??????? {
??????????? InitializeComponent();
??????? }
?????? private OperateAccess mypop = new OperateAccess();
?????? private ArrayList m_List = new ArrayList();
????
??????? private void Form1_Load(object sender, EventArgs e)
??????? {
???????????
??????????? mypop.RefData.GetTableNames("WindowsForms827");
??????????? foreach (object obj in mypop.RefData.TableInfos)
??????????? {
??????????????? if (obj is TableInfo)
??????????????? {
??????????????????? TableInfo temp = (TableInfo)obj;
??????????????????? TreeNode node = new TreeNode(temp.Name);
??????????????????? node.Tag = temp;
??????????????????? this.treeView1.Nodes.Add(node);
??????????????? }
??????????? }
???????????
??????? }
??????? /// <summary>
??????? /// 雙擊選擇當前操作表
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
??????? {
??????????? if (e.Node.Tag is TableInfo)
??????????? {
?????????????? TableInfo m_tableInfo = (TableInfo)e.Node.Tag;
??????????????? if (mypop.nowTable != "" && mypop.nowTable != m_tableInfo.CodeName)//判斷當前表名與上一次表名是否相同
??????????????? {
??????????????????? //? this.textBox1.Text = m_tableInfo.Name;
??????????????????? mypop.RefData.FieldInfos.Clear();//清空
??????????????????? listView2.Items.Clear();???? //清空
??????????????????? listView1.Columns.Clear();?? //清空?? 防止數據疊加
??????????????????? mypop.nowTable = m_tableInfo.CodeName;//獲取當前操作表
??????????????????? this.label1.Visible = true;
??????????????????? this.label1.Text = m_tableInfo.Name;
??????????????????? mypop.RefData.GetFieldNames(m_tableInfo.Type);? //得到當前表的字段信息? 存在FieldInfos中
??????????????????? foreach (object obj in mypop.RefData.FieldInfos)
??????????????????? {
??????????????????????? if (obj is AuthorAttribute[])
??????????????????????? {
??????????????????????????? AuthorAttribute[] a_temp = (AuthorAttribute[])obj;
??????????????????????????? this.listView1.Columns.Add(a_temp[0].name, 80);
??????????????????????? }
??????????????????? }
??????????????????? ListViewItem item;
??????????????????? this.listView1.Items.Clear();
??????????????????? m_List.Clear();
??????????????????? mypop.SelectFullId(ref? m_List);
??????????????????? if (m_List != null)
??????????????????? {
??????????????????????? foreach (object obj in m_List)//循環填充數據
??????????????????????? {
??????????????????????????? object[] objArray = (object[])obj;
??????????????????????????? item = new ListViewItem(objArray[0].ToString());
??????????????????????????? for (int i = 1; i < objArray.Length; i++)
??????????????????????????? {
??????????????????????????????? item.SubItems.Add(objArray[i].ToString());
??????????????????????????? }
??????????????????????????? if (item != null)
??????????????????????????? {
??????????????????????????????? listView2.Items.Add(item);
??????????????????????????????? item = null;
??????????????????????????? }
??????????????????????? }
??????????????????? }
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????? }
??????? }
??????? /// <summary>
??????? /// 查詢選中得到井號信息
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void button1_Click(object sender, EventArgs e)
??????? {
???????????
??????????? ArrayList tempList = new ArrayList();
??????????? if (mypop.nowTable != null)
??????????? {
???????????????
??????????????? for (int i = 0; i < listView2.Items.Count; i++)
??????????????? {
??????????????????? if (listView2.Items[i].Checked)
??????????????????? {
??????????????????????? tempList.Add(listView2.Items[i].Text);
??????????????????? }
??????????????? }
??????????????? ListViewItem item;
??????????????? this.listView1.Items.Clear();
??????????????? m_List.Clear();
??????????????? mypop.SelectInfo(ref m_List, tempList);
??????????????? if (m_List != null)
??????????????? {
??????????????????? foreach (object obj in m_List)
??????????????????? {
??????????????????????? object[] objArray = (object[])obj;
??????????????????????? item = new ListViewItem(objArray[0].ToString());
??????????????????????? for (int i = 1; i < objArray.Length; i++)
??????????????????????? {
??????????????????????????? item.SubItems.Add(objArray[i].ToString());
??????????????????????? }
??????????????????????? if (item != null)
??????????????????????? {
??????????????????????????? listView1.Items.Add(item);
??????????????????????????? item = null;
??????????????????????? }
??????????????????? }
??????????????? }
??????????
?
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????? }
???????????
??????? }
??????? /// <summary>
??????? /// 查詢表全部信息
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void button2_Click(object sender, EventArgs e)
??????? {
??????????? if (mypop.nowTable != null)
??????????? {
??????????????? ListViewItem item;
??????????????? this.listView1.Items.Clear();
??????????????? m_List.Clear();
??????????????? mypop.SelectFullInfo(ref? m_List);
??????????????? if (m_List != null)
??????????????? {
??????????????????? foreach (object obj in m_List)
??????????????????? {
??????????????????????? object[] objArray = (object[])obj;
??????????????????????? item = new ListViewItem(objArray[0].ToString());
??????????????????????? for (int i = 1; i < objArray.Length; i++)
??????????????????????? {
??????????????????????????? item.SubItems.Add(objArray[i].ToString());
??????????????????????? }
??????????????????????? if (item != null)
??????????????????????? {
??????????????????????????? listView1.Items.Add(item);
??????????????????????????? item = null;
??????????????????????? }
??????????????????? }
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? MessageBox.Show("請選擇數據表");
??????????? }
??????? }
??????? /// <summary>
??????? /// 雙擊事件(當雙擊listView2中的井號,查詢雙擊的井號信息)
??????? /// </summary>
??????? /// <param name="sender"></param>
??????? /// <param name="e"></param>
??????? private void listView2_MouseDoubleClick(object sender, MouseEventArgs e)
??????? {
???????????
???????????????
??????????????? ListViewItem item;?
??????????????? ListViewItem tempItem = this.listView2.GetItemAt(e.X, e.Y);
??????????????? if (tempItem != null)
??????????????? {
?????????????????? this.listView1.Items.Clear();
??????????????????? m_List.Clear();
??????????????????? mypop.SelectInfo(ref m_List, tempItem.Text);
??????????????????? if (m_List != null)
??????????????????? {
??????????????????????? foreach (object obj in m_List)
??????????????????????? {
??????????????????????????? object[] objArray = (object[])obj;
??????????????????????????? item = new ListViewItem(objArray[0].ToString());
??????????????????????????? for (int i = 1; i < objArray.Length; i++)
??????????????????????????? {
??????????????????????????????? item.SubItems.Add(objArray[i].ToString());
??????????????????????????? }
??????????????????????????? if (item != null)
??????????????????????????? {
??????????????????????????????? listView1.Items.Add(item);
??????????????????????????????? item = null;
??????????????????????????? }
??????????????????????? }
??????????????????? }
??????????????? }
???????????
?????????
??????? }
???????
??? }
}
?
?
?
總結
以上是生活随笔為你收集整理的反射+自定义属性拼接sql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode LCP 02. 分式化
- 下一篇: 一文搞懂大比例尺地形图测绘