标签:
xmal文件
<Window x:Class="MyCode.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="代码生成器" Height="650" Width="825" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen"> <Grid> <TextBox Name="txtConnStr" HorizontalAlignment="Left" Height="23" Margin="20,10,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="647"/> <Button Name="btnConnect" Content="连接" HorizontalAlignment="Left" Margin="699,10,0,0" VerticalAlignment="Top" Width="108" Click="btnConnect_Click"/> <ComboBox Name="cmbTables" IsEnabled="False" HorizontalAlignment="Left" Margin="20,51,0,0" VerticalAlignment="Top" Width="222"/> <Button Name="btnCodeGen" IsEnabled="False" Content="生成代码" HorizontalAlignment="Left" Margin="285,53,0,0" VerticalAlignment="Top" Width="98" RenderTransformOrigin="0.587,0.158" Click="btnCodeGen_Click"/> <TextBox Name="txtModel" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" IsReadOnly="True" HorizontalAlignment="Left" Height="509" Margin="20,90,0,0" Text="" VerticalAlignment="Top" Width="328"/> <TextBox Name="txtDAL" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" IsReadOnly="True" HorizontalAlignment="Left" Height="509" Margin="370,90,0,0" Text="" VerticalAlignment="Top" Width="437"/> </Grid> </Window>
cs文件
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace MyCode { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public DataTable ExecuteDataTable(string sql) { using(SqlConnection conn=new SqlConnection(txtConnStr.Text)) { conn.Open(); using(SqlCommand cmd=conn.CreateCommand()) { cmd.CommandText = sql; DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.FillSchema(ds, SchemaType.Source); adapter.Fill(ds); return ds.Tables[0]; } } } private void btnConnect_Click(object sender, RoutedEventArgs e) { if(txtConnStr.Text.Length>0) { //选出所有的表名 string sql = "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE=‘BASE TABLE‘"; DataTable table = null ; try { table = ExecuteDataTable(sql); } catch(SqlException sqlex) { MessageBox.Show("连接数据库出错:"+sqlex.Message); } string[] tables = new string[table.Rows.Count]; for(int i=0;i<table.Rows.Count;++i) { DataRow row = table.Rows[i]; tables[i] = (string)row[0]; } cmbTables.ItemsSource = tables; cmbTables.IsEnabled = true; btnCodeGen.IsEnabled = true; //把连接字符串记录到文件中,方便下次链接 string configFile = GetConfigFilePath(); //写入文件 File.WriteAllText(configFile, txtConnStr.Text); } else { MessageBox.Show("请输入连接字符串!"); } } public string GetConfigFilePath() { string configDir = AppDomain.CurrentDomain.BaseDirectory; string configFile = System.IO.Path.Combine(configDir, "configFile.txt"); if(!File.Exists(configFile))//如果不存在创建之 { using (FileStream fs = File.Create(configFile)) { } } return configFile; } private void Window_Loaded(object sender, RoutedEventArgs e) { string configFile=GetConfigFilePath(); txtConnStr.Text = File.ReadAllText(configFile); } private string GetDataType(DataColumn colum) { if (colum.AllowDBNull && colum.DataType.IsValueType ) { return colum.DataType + "?"; } else return colum.DataType.ToString(); } private void btnCodeGen_Click(object sender, RoutedEventArgs e) { string tableName = (string)cmbTables.SelectedItem; if(tableName==null) { MessageBox.Show("请先选择表!"); return; } CreateModelCode(tableName); CreateDALCode(tableName); } private void CreateModelCode(string tableName) { string sql = "select top 0 * from " + tableName; DataTable table = ExecuteDataTable(sql); StringBuilder sb = new StringBuilder(); sb.Append("public class ").Append(tableName).AppendLine(" {"); foreach (DataColumn colum in table.Columns) { string dataType = GetDataType(colum); sb.Append("public ").Append(dataType).Append(" ").Append(colum.ColumnName).AppendLine("{ get ; set ; }"); } sb.AppendLine("}"); txtModel.Text = sb.ToString(); } private void CreateDALCode(string tableName) { string sql = "select top 0 * from " + tableName; DataTable table = ExecuteDataTable(sql); StringBuilder sb = new StringBuilder(); sb.Append("public class ").Append(tableName).AppendLine("DAL"); sb.AppendLine("{"); //类的内部方法 //方法1 // public object ToDBNull(object value) // { // if(value==null) // { // return DBNull.Value; // } // else // { // return value; // } // } sb.AppendLine(); sb.AppendLine("private object ToDBNull(object value) "); sb.AppendLine("{"); sb.AppendLine("if(value==null) { return DBNull.Value; }"); sb.AppendLine("else { return value; }"); sb.AppendLine("}"); sb.AppendLine(); //方法2 // public object FromDBNull(object value) //{ // if(value==DBNull.Value) // { // return null; // } // else // { // return value; // } //} sb.AppendLine(); sb.AppendLine("private object FromDBNull(object value) "); sb.AppendLine("{"); sb.AppendLine("if(value==DBNull.Value) { return null; }"); sb.AppendLine("else { return value; }"); sb.AppendLine("}"); sb.AppendLine(); //方法3 //DataRowToModel sb.AppendLine(); sb.Append("private ").Append(tableName).Append(" DataRowToModel(DataRow row)"); sb.AppendLine("{"); sb.Append(tableName).Append(" model = new ").Append(tableName).AppendLine("() ;"); foreach(DataColumn column in table.Columns) { // employee.HomePlace = (string)row["HomePlace"]; string dataType=GetDataType(column); if (column.AllowDBNull && column.DataType.IsValueType) { sb.Append("model.").Append(column.ColumnName).Append(" = (").Append(dataType).Append(")FromDBNull( row[\"").Append(column.ColumnName).AppendLine("\"]);"); } else { sb.Append("model.").Append(column.ColumnName).Append(" = (").Append(dataType).Append(") row[\"").Append(column.ColumnName).AppendLine("\"];"); } } sb.AppendLine("return model;"); sb.AppendLine("}"); sb.AppendLine(); //方法4 // public Employee GetById(Guid id) //{ // string sql = "select * from T_Employee where ID=@ID"; // Employee employee = new Employee(); // DataTable table = SqlHelper.ExecuteDataTable(sql, new SqlParameter("@ID", id)); // if(table.Rows.Count<=0) // { // MessageBox.Show("未找到相关记录"); // return null; // } // else if(table.Rows.Count>1) // { // throw new Exception("主键重复"); // } // else // { // employee = DataRowToEmployee(table.Rows[0]); // return employee; // } //} sb.AppendLine(); sb.Append("public ").Append(tableName).Append(" GetById(").Append(GetDataType(table.PrimaryKey[0]).ToString()).AppendLine(" id)"); sb.AppendLine("{"); sb.Append("string sql = \"select * from ").Append(tableName).AppendLine(" where ID=@ID\" ;"); sb.Append(tableName).Append(" model = new ").Append(tableName).AppendLine("() ;"); sb.AppendLine("DataTable table = SqlHelper.ExecuteDataTable(sql, new SqlParameter(\"@ID\", id));"); sb.AppendLine("if(table.Rows.Count<=0) { MessageBox.Show(\"未找到相关记录\"); return null; }"); sb.AppendLine("else if(table.Rows.Count>1) { throw new Exception(\"主键重复\"); }"); sb.AppendLine("else { return model=DataRowToModel(table.Rows[0]); }"); sb.AppendLine("}"); sb.AppendLine(); //方法5 // public void DeleteById(Guid id) //{ // string sql = "update T_User set IsDeleted=1 where ID=@ID"; // SqlHelper.ExecuteNonQuery(sql, new SqlParameter("@ID", id)); //} sb.AppendLine(); sb.Append("public void DeleteById(").Append(GetDataType(table.PrimaryKey[0]).ToString()).AppendLine(" id)"); sb.AppendLine("{"); sb.Append("string sql = \"update ").Append(tableName).AppendLine(" set IsDeleted=1 where ID=@ID\" ;"); sb.AppendLine("SqlHelper.ExecuteNonQuery(sql, new SqlParameter(\"@ID\", id));"); sb.AppendLine("}"); sb.AppendLine(); //方法6 // public User[] ListAll() //{ // string sql = "select * from T_User where IsDeleted=0"; // DataTable table = SqlHelper.ExecuteDataTable(sql); // User[] users =new User[table.Rows.Count]; // for(int i=0;i<table.Rows.Count;++i) // { // users[i] = ToUser(table.Rows[i]); // } // return users; //} sb.AppendLine(); sb.Append("public ").Append(tableName).AppendLine("[] ListAll()"); sb.AppendLine("{"); sb.Append("string sql = \"select * from ").Append(tableName).AppendLine(" where IsDeleted=0\" ;"); sb.AppendLine("DataTable table = SqlHelper.ExecuteDataTable(sql);"); sb.Append(tableName).Append("[] models = new ").Append(tableName).AppendLine(" [table.Rows.Count];"); sb.AppendLine("for(int i=0;i<table.Rows.Count;++i)"); sb.AppendLine("{"); sb.AppendLine("models[i] = DataRowToModel(table.Rows[i]);"); sb.AppendLine("}"); sb.AppendLine("return models;"); sb.AppendLine("}"); sb.AppendLine(); //方法7 // public void Insert(Department depart) //{ // string sql = "insert into T_Department(ID,Name,IsDeleted) values(newid(),@Name,0)"; // SqlHelper.ExecuteNonQuery(sql, new SqlParameter("@Name", depart.Name)); //} string[] columnsNames=GetColumnsName(table); string[] paramsNames = GetParamsName(table); string[] newParamsStrings=GetNewParamsStrings(table); sb.Append("public void Insert( ").Append(tableName).AppendLine(" model)"); sb.AppendLine("{"); sb.Append("string sql = @\"insert into ").Append(tableName).Append(" \n(").Append(string.Join(",",columnsNames )).Append(" )\n values\n(").Append(string.Join(",", paramsNames)).AppendLine(" )\";"); sb.Append("SqlHelper.ExecuteNonQuery(sql, ").AppendLine(string.Join(",", newParamsStrings)); sb.AppendLine(");"); sb.AppendLine("}"); sb.AppendLine(); sb.AppendLine(); //方法7更新 //三个参数在增加时已经查出 //string[] columnsNames = GetColumnsName(table); //string[] paramsNames = GetParamsName(table); //string[] newParamsStrings = GetNewParamsStrings(table); sb.Append("public void Update( ").Append(tableName).AppendLine(" model)"); sb.AppendLine("{"); //string sql = "update T_Department set Name=@Name,IsDeleted=@IsDeleted where ID=@ID"; sb.Append("string sql = @\"update ").Append(tableName).Append(" set ").Append(string.Join(",", GetUpdateStrings(table))).AppendLine(" \";"); sb.Append("SqlHelper.ExecuteNonQuery(sql, ").AppendLine(string.Join(",", newParamsStrings)); sb.AppendLine(");"); sb.AppendLine("}"); sb.AppendLine(); sb.AppendLine(); //类的内部方法结束 sb.AppendLine("}"); txtDAL.Text = sb.ToString(); } private string[] GetColumnsName(DataTable table) { string[] names = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count;++i ) { names[i] = table.Columns[i].ColumnName; } return names; } private string[] GetParamsName(DataTable table) { string[] names = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; ++i) { names[i] = "@"+table.Columns[i].ColumnName; } return names; } private string[]GetNewParamsStrings(DataTable table) { string[] columnsNames = GetColumnsName(table); string[] paramsNames = GetParamsName(table); string[] newParamsStrings = new string[table.Columns.Count]; for(int i=0;i<table.Columns.Count;++i) { DataColumn column = table.Columns[i]; if(column.AllowDBNull&&column.DataType.IsValueType) { newParamsStrings[i] = "\n new SqlParameter(\"" + paramsNames[i] + "\", ToDBNull(model." + columnsNames[i] + ") )"; } else { newParamsStrings[i] = "\n new SqlParameter(\"" + paramsNames[i] + "\", model." + columnsNames[i] + " )"; } } return newParamsStrings; } private string[] GetUpdateStrings(DataTable table) { string[] columnsNames = GetColumnsName(table); string[] paramsNames = GetParamsName(table); string[] updateStrings = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; ++i) { DataColumn column = table.Columns[i]; updateStrings[i] = "\n "+columnsNames[i] + " = " + paramsNames[i]; } return updateStrings; } } }
标签:
原文地址:http://www.cnblogs.com/I-am-on-the-way/p/4257435.html