自己寫代碼生成器之生成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代碼。");
}
}