博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何实现数据库实体生成工具
阅读量:4963 次
发布时间:2019-06-12

本文共 3898 字,大约阅读时间需要 12 分钟。

 

1 原理:

利用 SqlDataReader .GetSchemaTable获取列元数据,然后根据列的元数据生成需要的实体。本程序主要用到了以下三个字段,SchemaTable的其它字段见MSDN.

名称

说明

ColumnName

列的名称;它可能不唯一。如果无法确定该名称,则返回 null 值。此名称始终反映最近对当前视图或命令文本中的列进行的重命名。

DataType

映射到列的 .NET Framework 类型。

AllowDBNull

如果使用者可以将该列设置为 null 值,或者如果提供程序不能确定使用者是否可以将该列设置为 null 值,则设置该值。否则,不设置该值。即使列无法设置为 null 值,它仍可能包含 null 值。

2实现

(1) 表结构

(2) 生成表格的脚本

USE [BPMDB] GO /****** 对象: Table [dbo].[PW_User] 脚本日期: 09/03/2011 13:13:06 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[PW_User]( [ID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_PW_User_ID] DEFAULT (newid()), [userNo] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, [password] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NOT NULL, [lastName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NOT NULL, [firstName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL, [alias] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL, [sex] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL, [birthDate] [datetime] NULL, [phone] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL, [email] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL, [showRule] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL, [isFreeze] [int] NULL, CONSTRAINT [PK_PW_User_Id] PRIMARY KEY NONCLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
(3) 代码
/******************************************************************* * * Copyright (C) hbb0b0 * * All rights reserved. * * * Author: HBB0b0 (hbb0b0@163.com) * Create Date:2011/9/3 13:00:59 * Description:简单的数据库实体生成工具 * * * * Date Author Description * *******************************************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.Sql; using System.Data.SqlClient; using System.Diagnostics; using System.Configuration; namespace HBB0b0 {
class Program {
static void Main(string[] args) {
using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlserver"].ConnectionString)) {
myConnection.Close(); myConnection.Open(); DataTable dt = null; string tableName = "PW_User"; dt = GetTableSchema(myConnection, tableName); WriteClassEntity(dt, tableName); } Console.Read(); } /// /// 获取指定表的架构 /// /// /// ///
private static DataTable GetTableSchema(SqlConnection connection, string tableName) {
using (SqlCommand cmd = connection.CreateCommand()) {
cmd.CommandType = CommandType.Text; cmd.CommandText = string.Format("select top (1) * from {0} with(nolock) ", tableName); DataTable dt = null; // using (SqlDataReader read = cmd.ExecuteReader()) {
SqlDataReader read = cmd.ExecuteReader(); dt = read.GetSchemaTable(); } return dt; } } /// /// 生成表对应的实体 /// /// /// private static void WriteClassEntity(System.Data.DataTable dtSchema, string tableName) {
StringBuilder sb = new StringBuilder(); sb.Append("[Serializable]"); sb.AppendLine(); sb.AppendFormat("public class {0}Entity", tableName); sb.AppendLine(); sb.AppendLine("{"); foreach (System.Data.DataRow row in dtSchema.Rows) {
//列名称 DataColumn nameCol = dtSchema.Columns[dtSchema.Columns.IndexOf("ColumnName")]; //类型 DataColumn typeCol = dtSchema.Columns[dtSchema.Columns.IndexOf("DataType")]; //是否为空 DataColumn allowDBNullCol = dtSchema.Columns[dtSchema.Columns.IndexOf("AllowDBNull")]; string symbolCanNull = ""; if (Boolean.Parse(row[allowDBNullCol].ToString()) && Type.GetType(row[typeCol].ToString()).IsValueType) {
symbolCanNull = "?"; } string info = string.Format("public {0}{1} {2} {3} get; set; {4}", row[typeCol].ToString(), symbolCanNull, row[nameCol].ToString(), "{", "}"); sb.AppendLine(info); } sb.AppendLine("}"); //Trace.Listeners.Remove("myListener"); Console.WriteLine(sb.ToString()); //Trace.Write(sb.ToString()); //Trace.Flush(); } } }
(4)运行结果

转载于:https://www.cnblogs.com/hbb0b0/archive/2011/09/03/2165356.html

你可能感兴趣的文章
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
hdu 3183 A Magic Lamp 贪心
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
面试题14 调整数组顺序使奇数位于偶数前面
查看>>
grid网格布局
查看>>
flask简单的注册功能
查看>>
JSP常用标签
查看>>
dashucoding记录2019.6.7
查看>>
IOS FMDB
查看>>
编码总结,以及对BOM的理解
查看>>