PDF.NET是个开源的项目其解决UI层(WinForm / Web)控件数据绑定、映射与查询; BLL层实体对象查询(OQL);DAL层SQL语句和.NET数据访问代码映射(查看  SQL-MAP 原理);由于其工具是VB语言开发,个人将他翻成C#版本,仅供学习和交流,对于初学者和C#初学者有一定能够帮助;有不足之处大家尽管拍砖,下面进入正题:

  1. 程序界面

  • 大致思路

通过数据库连接查询所有表名——》根据表中列名、描述及字段类型生成实体类对应的属性——》根据项目需求实体类样式生成文件

  • 所需控件

LookUpEdit(记录历史输入数据)、TextEdit(输入密码以掩码的形式展现)、SimpleButton(触发操作)、ButtonEdit(选择文档输出目录)、GridControl(数据展示的容器)、ProgressBar(操作进度条)

  • 后台代码实现
     public partial class runForm : Form
{
public runForm()
{
InitializeComponent();
Load += new EventHandler(runForm_Load); //锁定窗口大小
this.FormBorderStyle = FormBorderStyle.FixedDialog; //显示查询区域
this.gvTable.ShowFindPanel();
} void runForm_Load(object sender, EventArgs e)
{
connFile = GetConfigFilePath("UserHistory.txt"); //标准格式 "Data Source=10.10.198.242;Initial Catalog=mesbj;User ID=sa;Password=sa
//数据库地址赋值
DataConnect dc = GetConnect(connFile);
if (dc == null)
return;
lueDataSource.Text = dc.dataSource;
lueDataBase.Text = dc.dataBase;
lueUser.Text = dc.user;
txtPassWord.Text = dc.passWord; lueDataSource.Properties.DataSource = sourcelst;
lueDataBase.Properties.DataSource = baselst;
lueUser.Properties.DataSource = userlst;
} /// <summary>
/// 读取配置文件给界面复制默认值
/// </summary>
/// <returns></returns>
private DataConnect GetConnect(string connPath)
{
DataConnect dc = new DataConnect();
string strcon = File.ReadAllText(connPath, Encoding.UTF8);
string[] str = strcon.Split(';');
for (int i = ; i < str.Count(); i++)
{
switch (i)
{
case :
dc.dataSource = GetConfig(str[i].Split('=')[], i);
break;
case :
dc.dataBase = GetConfig(str[i].Split('=')[], i);
break;
case :
dc.user = GetConfig(str[i].Split('=')[], i);
break;
case :
dc.passWord = GetConfig(str[i].Split('=')[], i);
break;
case :
OutputPath.Text = GetConfig(str[i].Split('=')[], i);
break;
default:
break;
}
}
return dc;
} /// <summary>
/// 数据库连接配置文件
/// </summary>
private string connFile { set; get; } /// <summary>
/// 数据库地址
/// </summary>
private List<string> sourcelst { set; get; } /// <summary>
/// 数据库名称
/// </summary>
private List<string> baselst { set; get; } /// <summary>
/// 用户
/// </summary>
private List<string> userlst { set; get; } /// <summary>
/// 所有表名
/// </summary>
private List<string> tables { set; get; } /// <summary>
/// 当前选择表名
/// </summary>
private string scttable { set; get; } /// <summary>
/// 读取=号最后一个值
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string GetConfig(string str, int i)
{
string[] con = str.Split(',');
switch (i)
{
case :
sourcelst = new List<string>();
sourcelst.AddRange(con.ToArray());
break;
case :
baselst = new List<string>();
baselst.AddRange(con.ToArray());
break;
case :
userlst = new List<string>();
userlst.AddRange(con.ToArray());
break;
default:
break;
}
//获取最后一项作为默认值
string config = con[con.Count() - ];
return config;
} /// <summary>
/// 读取文件路径
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
private string GetConfigFilePath(string fileName)
{
string currenctDir = AppDomain.CurrentDomain.BaseDirectory;//存放路径
string configFile = System.IO.Path.Combine(currenctDir, fileName);
return configFile;
} /// <summary>
/// lookupEdit 添加控制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lueDataSource_ProcessNewValue(object sender, ProcessNewValueEventArgs e)
{
LookUpEdit lue = sender as LookUpEdit;
AddDataSurce(lue);
} /// <summary>
/// LookUpEdit 输入字段添加赋值
/// </summary>
/// <param name="lue">输入字段</param>
private void AddDataSurce(LookUpEdit lue)
{
string value = lue.Text;
if (string.IsNullOrEmpty(value))
return;
(lue.Properties.DataSource as List<string>).Add(value);
} /// <summary>
/// 连接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConnect_Click(object sender, EventArgs e)
{
DataConnect dc = new DataConnect();
dc.dataSource = lueDataSource.Text;
dc.dataBase = lueDataBase.Text;
dc.user = lueUser.Text;
dc.passWord = txtPassWord.Text; SqlHelper sl = new SqlHelper(dc); DataTable dt = SqlHelper.GetTables(@"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'"); List<TableName> lst = new List<TableName>(); tables = new List<string>();
foreach (DataRow item in dt.Rows)
{
tables.Add(item[].ToString());
lst.Add(new TableName() { name = item[].ToString() });
}
gcTable.DataSource = lst; WriteConninfo();
} /// <summary>
/// 写入连接配置
/// </summary>
private void WriteConninfo()
{
//数据库地址
string strconn = @"Data Source=" + WriteConninfo(lueDataSource, sourcelst) + ";Initial Catalog=" + WriteConninfo(lueDataBase, baselst) +
";User ID=" + WriteConninfo(lueUser, userlst) + ";Password=" + txtPassWord.Text + ";OutputPath=" + OutputPath.Text;
File.WriteAllText(connFile, strconn);
} private string WriteConninfo(LookUpEdit lup, List<string> lst)
{
lst = new List<string>();
lst = lup.Properties.DataSource as List<string>;
if (lst.Contains(lup.Text))
{
lst.Remove(lup.Text);
lst.Add(lup.Text);
}
string conn = "";
foreach (string item in lst)
{
conn = conn + item + ",";
}
return conn.TrimEnd(',');
} /// <summary>
/// table 表选中事件,查询表中所有字段
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gvTable_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
TableName dv = gvTable.GetRow(e.FocusedRowHandle) as TableName;
if (dv == null)
return;
string table = dv.name;
dv.template = true; //DataTable dt = SqlHelper.GetTables("Select name from syscolumns Where ID=OBJECT_ID('" + table + "') ");
//gcColumn.DataSource = dt;
} /// <summary>
/// 选择输出目录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OutputPath_ButtonClick(object sender, ButtonPressedEventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK)
{
this.OutputPath.Text = fbd.SelectedPath; ;
}
} /// <summary>
/// 实体类生成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMakeFile_Click(object sender, EventArgs e)
{
if (tables == null || tables.Count == )
{
MessageBox.Show("请先连接数据库", "实体类生成器");
return;
} if (!Directory.Exists(OutputPath.Text))
{
MessageBox.Show("指定的代码输出目录" + OutputPath.Text + "不存在,请在属性窗口选择有效的路径。", "实体类生成器");
return;
} if (rbtnSelectOneTable.Checked)
{
tables = new List<string>();
foreach (TableName item in gvTable.DataSource as List<TableName>)
{
if (item.template)
{
tables.Add(item.name);
}
}
} PrgBarMakeFile.Maximum = tables.Count; txtMakeLog.Text = "";
if (string.IsNullOrEmpty(OutputPath.Text))
{
MessageBox.Show("OutputPath路径不能为空!", "实体类生成器");
return;
} int count = ;
foreach (string item in tables)
{
count++;
txtMakeLog.AppendText("正在生成第" + count + " 个实体类文件: " + OutputPath.Text + "\\" + item + ".cs" + "\r\n");
PrgBarMakeFile.Value = count;
CreatModelCode(item);
}
MessageBox.Show("生成 " + count + " 个实体类文件!", "实体类生成器"); WriteConninfo();
} /// <summary>
/// 创建实体类文件内容
/// </summary>
/// <param name="tableNam"></param>
private void CreatModelCode(string tableName)
{
//表结构主键
string primaryKey = "";
//列名集合
string propertyNames = ""; DataTable dt = SqlHelper.GetTables("select top 0 * from " + tableName); if (dt.PrimaryKey != null && dt.PrimaryKey.Count() > )
{
primaryKey = dt.PrimaryKey[].ToString();
} foreach (DataColumn item in dt.Columns)
{
propertyNames = propertyNames + ",\"" + item.ColumnName + "\"";
}
propertyNames = propertyNames.TrimStart(','); StringBuilder sb = new StringBuilder();
sb.AppendLine("using System;");
//转化配置处理
sb.AppendLine("using System.Collections.Generic;");
sb.AppendLine("using System.Text;"); sb.AppendLine(); //转化配置处理
sb.AppendLine("namespace Com.Wisdom.VO");
sb.AppendLine("{"); sb.AppendLine(" [Serializable()]"); //继承基类,转化配置处理
sb.AppendLine(" public partial class " + tableName + " : WsdGenericDto"); sb.AppendLine(" {"); //构造函数
sb.AppendLine(" public " + tableName + "()");
sb.AppendLine(" {");
sb.AppendLine(" TableName = " + "\"" + tableName + "\";");
sb.AppendLine(" EntityMap=EntityMapType.Table;");
sb.AppendLine(" //IdentityName = \"标识字段名\";");
sb.AppendLine();
sb.AppendLine(" //PrimaryKeys.Add(\"主键字段名\")"); sb.AppendLine(" PrimaryKeys.Add(" + "\"" + primaryKey + "\")");
sb.AppendLine();
sb.AppendLine(" }"); sb.AppendLine(" protected override void SetFieldNames()");
sb.AppendLine(" {");
sb.AppendLine(" PropertyNames = new string[] { " + propertyNames + "};");
sb.AppendLine(" }"); sb.AppendLine();
sb.AppendLine(); foreach (DataColumn item in dt.Columns)
{
sb.AppendLine();
sb.AppendLine(" /// <summary>");
sb.AppendLine(" /// " + GetDescribe(tableName, item.ColumnName));
sb.AppendLine(" /// </summary>");
sb.AppendLine(" public " + GetDataType(item) + item.ColumnName);
sb.AppendLine(" {");
sb.AppendLine(" get{return getProperty<" + GetDataType(item) + ">(\"" + item.ColumnName + "\");}");
sb.AppendLine(" set{setProperty(\"" + item.ColumnName + "\",value " + GetMaxValue(item) + ");}");
sb.AppendLine(" }");
} sb.AppendLine();
sb.AppendLine(); sb.AppendLine(" }"); sb.AppendLine("}"); string configFile = OutputPath.Text + "\\" + tableName + ".cs";
File.WriteAllText(configFile, sb.ToString());
} /// <summary>
/// 获取列名描述
/// </summary>
/// <param name="table"></param>
/// <param name="column"></param>
/// <returns></returns>
private string GetDescribe(string table, string column)
{
string describe = "";
DataTable dt = SqlHelper.GetTables(@"SELECT value FROM ::fn_listextendedproperty(NULL,'user','dbo','table','" + table + "\'" + ",'column',NULL) WHERE objname='" + column + "\'");
if (dt != null && dt.Rows != null && dt.Rows.Count > )
{
describe = dt.Rows[].ItemArray[].ToString();
}
return describe;
} /// <summary>
/// 根据表中最大值,处理
/// </summary>
/// <param name="column"></param>
/// <returns></returns>
private string GetMaxValue(DataColumn column)
{
if (column.MaxLength > )
{
return "," + column.MaxLength.ToString();
}
else return "";
} /// <summary>
/// 判断表中列是否为空处理,范围属性类型
/// </summary>
/// <param name="column"></param>
/// <returns></returns>
private string GetDataType(DataColumn column)
{
if (column.AllowDBNull && column.DataType.IsValueType)
{
return column.DataType + "? ";//表字段为空,类属性中添加?
}
else
{
return column.DataType.ToString() + " ";
}
}
}

SqlHelper代码

     public class SqlHelper
{
private static string strconn; public SqlHelper(DataConnect dc)
{
strconn = @"data source=" + dc.dataSource + ";database=" + dc.dataBase + ";user id=" + dc.user + ";password=" + dc.passWord;
} public static DataTable GetTables(string sql)
{
DataTable dt = new DataTable();
try
{
using (SqlConnection cnn = new SqlConnection(strconn))
{
cnn.Open();
using (SqlCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = sql;//执行sql
DataSet dataset = new DataSet();
SqlDataAdapter dapter = new SqlDataAdapter(cmd);
dapter.FillSchema(dataset, SchemaType.Source);
dapter.Fill(dataset);//将dataset添加到SqlDataAdapter容器中
dt = dataset.Tables[];
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return dt;
}
}

PDF.NET框架操作——工具应用(一)的更多相关文章

  1. python自动化测试(3)- 自动化框架及工具

    python自动化测试(3) 自动化框架及工具 1   概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...

  2. Java:集合框架的工具类

    集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数 ...

  3. 自定义MVC框架之工具类-模型类

    截止目前已经改造了5个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 自定义MVC框架之工具类-文件上传类 自定义MVC框架之工具类-图像处理 ...

  4. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  5. 2017年"程序媛和工程狮"绝对不能忽视的编程语言、框架和工具

      2017年"程序媛和工程狮"绝对不能忽视的编程语言.框架和工具 在过去的一年里,软件开发行业继续大踏步地向前迈进.回顾 2016 年,我们看到了更多新兴的流行语言.框架和工具, ...

  6. Spire.Pdf 的各种操作总结

     Spire.Pdf 的各种操作总结 简介 试验新产品总是给我带来许多挑战,当然这也是一个引进创新技术的好方法.在这里我要跟大家分享的是使用Spire.Pdf的过程,它是来自E-iceblue公司的轻 ...

  7. PDF.NET框架学习篇之SQL-MAP使用存储过程

    最近一直在学习“深蓝医生”的PDF.NET框架,对Sql-Map使用存储过程有了点小小的体会.基础知识请到http://www.cnblogs.com/bluedoctor/archive/2010/ ...

  8. Netty 异步的、事件驱动的网络应用程序框架和工具

    Netty是由JBOSS提供的一个Java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 项目地址:https://githu ...

  9. jQuery系列 第三章 jQuery框架操作CSS

    第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScr ...

随机推荐

  1. 微信小程序个人理解

    1:小程序不是用HTML5开发,它是由微信全新定义的规范,是基于XML+JS的,不支持也不兼容HTML,兼容受限的部分CSS写法.(wxml) weixin markup language 2:小程序 ...

  2. MVC EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

    遇到这个错误  在查询时 加上asNoTracking() 即可

  3. JQuery之append和appendTo的区别,还有js中的appendChild用法

    JQuery之append和appendTo的区别 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插入的元素内容且为Jquery对象,而后面是要选择的 ...

  4. 【学习笔记】【C语言】注释

    1. 什么是注释 1) 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解.解释的意思 2) 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流.假如我写完一行代 ...

  5. English Learning

    EnglishPod 百度云盘:http://pan.baidu.com/s/1eQUJquA

  6. 《自动共享LDAP用户并且访问其家目录》RHEL6

    实验的目的: 实现ldap服务器上的ldap用户被客户端访问,自动挂载到客户端,并且可以访问ldap用户的家目录. 服务端: 1.只需要配置文件: Iptables –F       关闭selinu ...

  7. zedboard之GPIO驱动(从FPGA一直到LINUX应用)

    1 EDK 大家知道我们在EDK中建立GPIO然后倒出到SDK中,在SDK中可以用C语言操作外设GPIO,但是这还是裸机程序,没有用到LINUX.本文将记录从FPGA  EDK生成GPIO一直到导入S ...

  8. 数字图象处理MATLAB学习

    diagram = imread('C:\Users\Administrator\Desktop\Compressed\fiter\lena256.jpg') %diagram = rgb2gray( ...

  9. 理解 pkg-config 工具

    引用了别人的文章:http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/ 你在 Unix 或 Linux 下开发过软件吗?写完一 ...

  10. 字符串反转(charat)

    package com.java1234.chap03.sec08; public class zifufanzhuan { public static void main(String[] args ...