自己写代码生成器之生成Dal层代码(获取数据库所有表名称)

--得到数据库birthday所有表名称
select name from sysobjects where [type]='U'
--select [TABLE_NAME] from  INFORMATION_SCHEMA.TABLES where [TABLE_TYPE]='BASE TABLE'

--获取列信息,不获取数据
select top 0 * from userInfo

思路:拼接字符串

        /// <summary>
/// 加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Index_Load(object sender, EventArgs e)
{
string sql = "select [TABLE_NAME] from INFORMATION_SCHEMA.TABLES where [TABLE_TYPE]='BASE TABLE'";
DataTable data = SqlHelper.ExeccutDataTable(sql);
if (data.Rows.Count > 0)
{
this.cmb_tableName.Items.Clear();
foreach (DataRow row in data.Rows)
{
string name = row["TABLE_NAME"].ToString();
this.cmb_tableName.Items.Add(name); }
this.cmb_tableName.SelectedIndex = 0;
}
} /// <summary>
/// 生成代码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_generate_Click(object sender, EventArgs e)
{
string tableName = this.cmb_tableName.SelectedItem.ToString();
string sql = "select top 0 * from " + tableName;
DataTable data = SqlHelper.ExeccutDataTable(sql); ///生成Dal层代码
GenerateDalCode(tableName, data);
} #region Dal
/// <summary>
/// 生成Dal层代码
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
private void GenerateDalCode(string tableName, DataTable data)
{
StringBuilder str = new StringBuilder(); //引用信息
str.AppendLine("using System;");
str.AppendLine("using System.Collections.Generic;");
str.AppendLine("using System.Data;");
str.AppendLine("using System.Data.SqlClient;");
str.AppendLine("using System.Linq;");
str.AppendLine("using System.Text;");
str.AppendLine("\r");
//命名空间
str.AppendLine("namespace AutoCodeKldder");
str.AppendLine("{");
//注释信息
str.AppendLine("\t/// <summary>");
str.AppendLine("\t/// " + tableName + "Service");
str.AppendLine("\t/// <summary>");
str.AppendLine("\t[Serializable]");
str.AppendLine("\tpublic class " + tableName + "Service");
str.AppendLine("\t{"); //GetModel
GetModel(tableName, data, str); //Add
Add(tableName, data, str); //AddOutPutField
AddOutPutField(tableName, data, str); //Update
Update(tableName, data, str); //Delete
Delete(tableName, data, str); //FullDataTable
FullDataTable(tableName, data, str); //FullDataSet
FullDataSet(tableName, data, str); //FullDataRow
FullDataRow(tableName, data, str); //GetRecordCount
GetRecordCount(tableName, data, str); str.AppendLine("\t}");
str.AppendLine("}");
this.txt_dalcode.Text = str.ToString().Trim();
} /// <summary>
/// 得到一条实体
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void GetModel(string tableName, DataTable data, StringBuilder str)
{
//方法一
str.AppendLine("\t\t#region GetModel");
//方法注释
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t///得到一条" + tableName + "实体");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"_row\">DataRow</param>");
str.AppendLine("\t\t /// <returns>" + tableName + "实体</returns>");
str.AppendLine("\t\tpublic " + tableName + " GetModel(DataRow _row)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\t" + tableName + " _" + tableName + " = new " + tableName + "();");
foreach (DataColumn dc in data.Columns)
{
//字段名称
string _name = dc.ColumnName;
//字段类型
string _type = dc.DataType.ToString();
str.AppendLine("\t\t\tif (_row[\"" + _name + "\"] != null)");
str.AppendLine("\t\t\t{");
str.AppendLine("\t\t\t\t_" + tableName + "." + _name + " = (" + _type + ")_row[\"" + _name + "\"];");
str.AppendLine("\t\t\t}");
}
str.AppendLine("\t\t\treturn _" + tableName + ";");
str.AppendLine("\t\t}");
str.AppendLine(""); //方法二
//方法注释
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t///得到一条" + tableName + "实体");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t /// <returns>" + tableName + "实体</returns>");
str.AppendLine("\t\tpublic " + tableName + " GetModel(string sql)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn GetModel(SqlHelper.ExecuteDataRow(sql));");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 添加
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void Add(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region Add");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 添加");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
str.AppendLine("\t\t/// <returns>是否成功</returns>");
str.AppendLine("\t\tpublic bool Add(" + tableName + " _" + tableName + ")");
str.AppendLine("\t\t{");
//拼接T-sql语句和SqlParameter[]
string str_sql_1 = "\"insert into [dbo].[userInfo](";
string str_sql_2 = "\r\n\t\t\t_sql+= \"vlaues(";
string str_param = "SqlParameter[] _param = {";
int idx = 0;
foreach (DataColumn dc in data.Columns)
{
string _name = dc.ColumnName;
string _dh = ",";
//最后一个字段没有逗号
if (idx == data.Columns.Count - 1)
{
_dh = "";
}
//不是自增长字段
if (!dc.AutoIncrement)
{
str_sql_1 += "[" + _name + "]" + _dh;
str_sql_2 += "@" + _name + _dh;
//str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\", System.Data.SqlDbType.Int) { Value = _" + tableName + "." + _name + " }" + _dh;
str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
}
idx++;
}
str_sql_1 += ")\";";
str_sql_2 += ")\";";
str_param += "\r\n\t\t\t\t\t\t};";
str.AppendLine("\t\t\tstring _sql = " + str_sql_1 + str_sql_2);
str.AppendLine("\t\t\t" + str_param);
str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql,_param) > 0;");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 添加并返回指定列
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void AddOutPutField(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region AddOutPutField");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 添加并返回指定列");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
str.AppendLine("\t\t/// <param name=\"_field\">指定列</param>");
str.AppendLine("\t\t/// <returns>指定列</returns>");
str.AppendLine("\t\tpublic object AddOutPutField(" + tableName + " _" + tableName + ", object _field)");
str.AppendLine("\t\t{");
//拼接T-sql语句和SqlParameter[]
string str_sql_1 = "\"insert into [dbo].[userInfo](";
string str_sql_2 = "\r\n\t\t\t_sql+= \" output inserted.\" + _field;\r\n\t\t\t_sql+= \" vlaues(";
string str_param = "SqlParameter[] _param = {";
int idx = 0;
foreach (DataColumn dc in data.Columns)
{
string _name = dc.ColumnName;
string _dh = ",";
//最后一个字段没有逗号
if (idx == data.Columns.Count - 1)
{
_dh = "";
}
//不是自增长字段
if (!dc.AutoIncrement)
{
str_sql_1 += "[" + _name + "]" + _dh;
str_sql_2 += "@" + _name + _dh;
str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
}
idx++;
}
str_sql_1 += ")\";";
str_sql_2 += ")\";";
str_param += "\r\n\t\t\t\t\t\t};";
str.AppendLine("\t\t\tstring _sql = " + str_sql_1 + str_sql_2);
str.AppendLine("\t\t\t" + str_param);
str.AppendLine("\t\t\treturn SqlHelper.ExecuteScalar(_sql,_param);");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 根据主键修改
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void Update(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region Update");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 根据主键修改");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
str.AppendLine("\t\t/// <returns>是否成功</returns>");
str.AppendLine("\t\tpublic bool Update(" + tableName + " _" + tableName + ")");
str.AppendLine("\t\t{");
//拼接T-sql语句和SqlParameter[]
string str_sql = "\"update [dbo].[userInfo] set ";
string str_param = "SqlParameter[] _param = {";
int idx = 0;
//标识字段
string _AutoIncrement = "";
foreach (DataColumn dc in data.Columns)
{
string _name = dc.ColumnName;
string _dh = ",";
//最后一个字段没有逗号
if (idx == data.Columns.Count - 1)
{
_dh = "";
}
//不是自增长字段
if (!dc.AutoIncrement)
{
str_sql += "[" + _name + "]" + "=@" + _name + _dh;
}
else
{
_AutoIncrement = dc.ColumnName;
}
str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
idx++;
}
str_sql += "\";\r\n\t\t\t_sql += \" where " + _AutoIncrement + "=@" + _AutoIncrement + "\";";
str_param += "\r\n\t\t\t\t\t\t};";
str.AppendLine("\t\t\tstring _sql = " + str_sql);
str.AppendLine("\t\t\t" + str_param);
str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql, _param) > 0;");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 根据主键删除
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void Delete(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region Delete");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 根据主键删除");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"id\">主键</param>");
str.AppendLine("\t\t/// <returns>是否成功</returns>");
str.AppendLine("\t\tpublic bool Delete(int id)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\tstring _sql = \"delete from [dbo].[userInfo] where [id]=@id\";");
str.AppendLine("\t\t\tSqlParameter[] _param = {");
str.AppendLine("\t\t\t\t\t\t\t\t\t\tnew SqlParameter(\"@id\",id)");
str.AppendLine("\t\t\t\t\t\t\t\t\t};");
str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql, _param) > 0;");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 填充DataTable
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void FullDataTable(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region FullDataTable");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataTable");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataTable</returns>");
str.AppendLine("\t\tpublic DataTable FullDataTable(string _sql)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataTable(_sql);");
str.AppendLine("\t\t}");
str.AppendLine("");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataTable");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataTable</returns>");
str.AppendLine("\t\tpublic DataTable FullDataTable(string _sql, SqlParameter[] _para)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataTable(_sql, _para);");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 填充DataSet
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void FullDataSet(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region FullDataSet");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataSet");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataSet</returns>");
str.AppendLine("\t\tpublic DataSet FullDataSet(string _sql)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataSet(_sql);");
str.AppendLine("\t\t}");
str.AppendLine("");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataSet");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataSet</returns>");
str.AppendLine("\t\tpublic DataSet FullDataSet(string _sql, SqlParameter[] _para)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataSet(_sql, _para);");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 填充DataRow
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void FullDataRow(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region FullDataRow");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataRow");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataRow</returns>");
str.AppendLine("\t\tpublic DataRow FullDataRow(string _sql)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExecuteDataRow(_sql);");
str.AppendLine("\t\t}");
str.AppendLine("");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 填充DataRow");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>DataRow</returns>");
str.AppendLine("\t\tpublic DataRow FullDataRow(string _sql, SqlParameter[] _para)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.ExecuteDataRow(_sql, _para);");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} /// <summary>
/// 返回数据记录条数
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="data">数据源</param>
/// <param name="str">字符串</param>
private static void GetRecordCount(string tableName, DataTable data, StringBuilder str)
{
str.AppendLine("");
str.AppendLine("\t\t#region GetRecordCount");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 返回数据记录条数");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <returns>记录条数</returns>");
str.AppendLine("\t\tpublic int GetRecordCount(string _sql)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.GetRecordCount(_sql);");
str.AppendLine("\t\t}");
str.AppendLine("");
str.AppendLine("\t\t/// <summary>");
str.AppendLine("\t\t/// 返回数据记录条数");
str.AppendLine("\t\t/// </summary>");
str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
str.AppendLine("\t\t/// <param name=\"_where\">过滤条件</param>");
str.AppendLine("\t\t/// <returns>记录条数</returns>");
str.AppendLine("\t\tpublic int GetRecordCount(string _sql, string _where)");
str.AppendLine("\t\t{");
str.AppendLine("\t\t\treturn SqlHelper.GetRecordCount(_sql, _where);");
str.AppendLine("\t\t}");
str.AppendLine("\t\t#endregion");
} #endregion
        /// <summary>
/// 复制代码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_copy_Click(object sender, EventArgs e)
{
Clipboard.Clear();
if (this.tabControl.SelectedIndex == 0)
{
if (string.IsNullOrWhiteSpace(this.txt_modelcode.Text))
{
return;
}
else
{
Clipboard.SetText(this.txt_modelcode.Text);
MessageBox.Show("成功复制Models代码。");
}
}
else
{
if (string.IsNullOrWhiteSpace(this.txt_dalcode.Text))
{
return;
}
else
{ Clipboard.SetText(this.txt_dalcode.Text);
MessageBox.Show("成功复制Dal代码。");
}
}

[置顶] 自己写代码生成器之生成Dal层代码(获取数据库所有表名称)的更多相关文章

  1. [置顶] 自己写sqlhelper类

    自己写sqlhelper类 using System; using System.Collections.Generic; using System.Configuration; using Syst ...

  2. [置顶] 自己写一个简单通用的Makefile

    转自:http://blog.csdn.net/u011913612/article/details/52102241 一.makefile的作用 Makefile是用于自动编译和链接的,一个工程有很 ...

  3. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...

  4. 解决Popup StayOpen=true时,永远置顶的问题

    Popup设置了StayOpen=true时,会置顶显示. 如弹出了Popup后,打开QQ窗口,Popup显示在QQ聊天界面之上. 怎么解决问题? 获取绑定UserControl所在的窗口,窗口层级变 ...

  5. Popup 解决置顶显示问题

    原文:Popup 解决置顶显示问题 前言 Popup显示时会置顶显示.尤其是 Popup设置了StayOpen=true时,会一直置顶显示,问题更明显. 置顶显示问题现象: 解决方案 怎么解决问题? ...

  6. MySQL 上移/下移/置顶

    在编写网站系统时,难免会用到上移.下移.置顶的功能,今天小编就介绍一下我的思路. 首先,需要一张数据表: CREATE TABLE `a` ( `id` ) NOT NULL AUTO_INCREME ...

  7. 让我们一起写出更有效的CSharp代码吧,少年们!

    周末空闲,选读了一下一本很不错的C#语言使用的书,特此记载下便于对项目代码进行重构和优化时查看. Standing On Shoulders of Giants,附上思维导图,其中标记的颜色越深表示在 ...

  8. 用C#实现对MSSqlServer数据库的增删改查---DAL层

    说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...

  9. [置顶] 【机器学习PAI实践十一】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码

    背景 最近互联网上出现一个热词就是"freestyle",源于一个比拼rap的综艺节目.在节目中需要大量考验选手的freestyle能力,freestyle指的是rapper即兴的 ...

随机推荐

  1. JFreeChart当鼠标停留在热点提示自定义信息功能

    当鼠标停留在数据点时,希望有提示信息显示,但是根据业务需要,我们需要自定义显示一下信息!具体功能实现如下: 首先我们要弄明白,Jfreechart鼠标提示信息显示主要是得到一个数据的map对象,该ma ...

  2. Android手机适配——UI图片适配

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/50727753 在Android项目当中,drawable文件夹都是用来放置图片资源 ...

  3. leetcode修炼之路——387. First Unique Character in a String

    最近公司搬家了,有两天没写了,今天闲下来了,继续开始算法之路. leetcode的题目如下: Given a string, find the first non-repeating characte ...

  4. 苹果新政,禁止开发者在App中加入检查更新功能

    今天妥妥的被拒了,苹果更新了新政策,不能在应用中出现检测更新的功能.AppStore会自动提醒用户更新. 去掉更新按钮,之后再尝试下看能通过不能

  5. linux的du和df命令

    今天也有同学问我Linux下查看目录大小的命令,现在也将前阵子学习到du/df两个命令总结一下吧.前阵子测试工作中有遇到过由于磁盘空间满导致程序无法执行到情况,所以使用了df和du两个命令. du查看 ...

  6. YesFInder - Web File Manager 网页文件管理系统

    开发原由: 原来想找一下实现可视化图片上传程序,先找了ckfinder,发现居然是收费的,而且用起来也不顺手,于是想能不能自己写一个.想到这就立即动手,花2天时间完成初步功能,然后再花了3天完善.目前 ...

  7. Extjs之遍历Store内的数据

    Store作为数据的载体,通过下面的方法可以获得Store内的数据; Ext.define('haomlGeimjTongjGrid_store_data', { extend: 'Ext.data. ...

  8. JS 日常

    判断一个字符串是否在另一个字符串里面 var str = 'bblText'; if(str.indexOf("Text") > 0)  alert("包含了Tex ...

  9. php开发中的url地址传输加密解密函数

    function keyED($txt,$encrypt_key) //定义一个keyED { $encrypt_key = md5($encrypt_key); $ctr=0; $tmp = ''; ...

  10. jdbc(1)(一)

    1.连接数据库,准备mysql连接jar包导入项目: Class.forName("com.mysql.jdbc.Driver"); //建立连接是比较耗时,耗资源的,实际开发中多 ...