黑马程序员----(2).net c# 一步一步自己写三层代码生成器(生成mode层)
生成mode
(1)在主界面 添加如下图这么几个控件。
(2)添加一个公共类 把一些 重复用到的方法写在这里面如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace 代码生成
{
public class comment
{
#region 类型转换//把数据库中字段类型转换为 c#的数据类型;
public static string sqldatatoc(string leixing)
{
switch(leixing)
{
case "nvarchar":
case "char":
case "text":
case "varchar": return "string";
case "date":
case "datetime": return "DateTime?";
case "float":
case "real": return "double?";
case "int": return "int?";
case "bit": return "bool";
default: return "string";
}
}
#endregion
#region 保存文件
public static void savefile(StringBuilder s)
{
StringWriter a = new StringWriter(s);
File.WriteAllText("c:\\1.cs", s.ToString());
}
#endregion
}
}
在主窗体的cs文件中添加生成model层的方法:
private void generateMode()
{
string constr = c.content.Replace("master",tvwserverlist.SelectedNode.Parent.Text);
StringBuilder sb = new StringBuilder();
sb.AppendLine("using System;");
sb.AppendLine("namespace " + txtmingm.Text+".model");
sb.AppendLine("{");
DataTable t = new DataTable();
string table = tvwserverlist.SelectedNode.Text;
sb.AppendLine(" public partial class " + table);
sb.AppendLine(" {");
string sql = "select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@tname";
SqlParameter p = new SqlParameter("@tname", table);
t = sqldbhelp.gettable(sql, constr, p);
foreach (DataRow r in t.Rows)
{
string lx = r["DATA_TYPE"].ToString();
lx = comment.sqldatatoc(lx);
sb.AppendLine(" private " + lx + " " + r["COLUMN_NAME"].ToString() + ";");
sb.AppendLine(" public " + lx + " " + r["COLUMN_NAME"].ToString().ToUpper());
sb.AppendLine(" {");
sb.AppendLine(" get{return " + r["COLUMN_NAME"].ToString() + ";}");
sb.AppendLine(" set{" + r["COLUMN_NAME"].ToString() + "=value;}");
sb.AppendLine(" }");
}
sb.AppendLine(" }\r\n}");
comment.savefile(sb);
}
这样我们的Mode层就生成好了。看看c盘下是不是有一个1.cs文件 这就是我们的mode层啦。
其他BLL,DAL ,以及数据库帮助类 也都是如此生成。在这里就不帖代码了。
当然这个系统做的有点简陋,有待完善。。。。。不过整体的思路就是这么个思路啦。
等我完善好了之后把我的代码贴上来。
下面是目前所做的代码。