日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網 > 自己編寫的DAL三層代碼生成器

自己編寫的DAL三層代碼生成器

來源:程序員人生   發(fā)布時間:2014-09-13 08:00:00 閱讀次數:3069次

(1)創(chuàng)建自己的解決方案 目錄結構如下:


(2)編寫代碼:

(要使用數據庫 建議創(chuàng)建任意數據庫即可)

創(chuàng)建配置文件App.config代碼如下:

<?xml version="1.0"?> <configuration> <connectionStrings> <add name="connstr" connectionString="Data Source=.; Initial Catalog=HRMSYSDB;User ID=hrmsa;Password=你的數據庫密碼"/> </connectionStrings> <appSettings> <add key="passwordSalt" value="love?P3@9"/> <add key="aaa" value="333"/> </appSettings> </configuration>
MainWindow.xaml代碼如下:(在MainWindow.xaml下把Grid里邊的代碼換一下就好了)

<Grid> <TextBox Height="23" HorizontalAlignment="Left" Margin="16,7,0,0" Name="txtConnStr" VerticalAlignment="Top" Width="542" /> <Button Content="連接" Height="23" HorizontalAlignment="Left" Margin="564,7,0,0" Name="btnConnect" VerticalAlignment="Top" Width="41" Click="btnConnect_Click" /> <ComboBox Height="23" HorizontalAlignment="Left" Margin="16,36,0,0" Name="cmbTables" VerticalAlignment="Top" Width="210" IsEnabled="False" /> <Button Content="生成代碼" Height="23" HorizontalAlignment="Left" Margin="244,36,0,0" Name="btnGenerateCode" VerticalAlignment="Top" Width="75" IsEnabled="False" Click="btnGenerateCode_Click" /> <TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Height="483" HorizontalAlignment="Left" Margin="16,66,0,0" Name="txtModelCode" VerticalAlignment="Top" Width="342" IsReadOnly="True" /> <TextBox TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Height="483" HorizontalAlignment="Left" Margin="372,66,0,0" Name="txtDALCode" VerticalAlignment="Top" Width="494" IsReadOnly="True" /> </Grid>

MainWindow.xaml.cs代碼如下:

namespace MyCodeGen //這里要把命名空間改成自己的 也就是自己生成的 只需粘貼<span style="font-family: Arial, Helvetica, sans-serif;">public partial class MainWindow : Window{ 下邊的內容即可</span> { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private 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) { DataTable table; try { table = ExecuteDataTable(@"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'"); } catch (SqlException sqlex) { MessageBox.Show("連接數據庫出錯!錯誤消息:" + sqlex.Message); return; } 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["TABLE_NAME"]; } cmbTables.ItemsSource = tables; cmbTables.IsEnabled = true; btnGenerateCode.IsEnabled = true; //把連接字符串記錄到文件中,避免用戶每次都需要輸入連接字符串 //將連接字符串保存起來 string configFile = GetConfigFilePath(); File.WriteAllText(configFile, txtConnStr.Text); //除非真的有捕獲異常的需要,否則不要try...catch } //為例避免每次都輸入鏈接數據庫字符串 將保存的代碼封裝到函數中 private static string GetConfigFilePath() { string currenctDir = AppDomain.CurrentDomain.BaseDirectory; string configFile = System.IO.Path.Combine(currenctDir, "connstr.txt"); return configFile; } private void Window_Loaded(object sender, RoutedEventArgs e) { //在每次加載的時候都要加載 保存在文件夾內的 連接字符串 string configFile = GetConfigFilePath(); txtConnStr.Text = File.ReadAllText(configFile); } private void btnGenerateCode_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) { DataTable table = ExecuteDataTable("select top 0 * from " + tablename); //在大量的字符串拼接的時候使用stringbuilder() StringBuilder sb = new StringBuilder(); sb.Append("public class ").AppendLine(tablename).AppendLine("{"); foreach (DataColumn column in table.Columns) { string columnDataType = GetDataTypeName(column); //判斷類型是否可空 sb.Append(" ").Append("public ").Append(columnDataType).Append(" ") .Append(column.ColumnName).AppendLine("{get;set;}"); } sb.AppendLine("}"); txtModelCode.Text = sb.ToString(); } //進行可空類型的處理 private static string GetDataTypeName(DataColumn column) { //如果列允許為null,并且列在C#中的類型是不可為空的(值類型ValueType) if (column.AllowDBNull && column.DataType.IsValueType) { return column.DataType + "?"; } else { return column.DataType.ToString(); } } //下邊是生成DALcode部分 private void CreateDALCode(string tablename) { DataTable table = ExecuteDataTable("select top 0 * from " + tablename); StringBuilder sb = new StringBuilder(); sb.Append("public class ").Append(tablename).AppendLine("DAL").AppendLine("{"); //tomodel開始 sb.Append(" ").Append("private ").Append(tablename) .AppendLine(" ToModel(DataRow row)").Append(" ").AppendLine("{"); sb.Append(" ").Append(tablename).AppendLine(" model = new " + tablename + "();"); foreach (DataColumn column in table.Columns) { //無論列是否允許為空,都進行判斷DbNull的處理(省事) //model.Id = (Guid)SqlHelper.FromDbValue(row["Id"]); sb.Append(" ").Append("model.").Append(column.ColumnName).Append("=(") .Append(GetDataTypeName(column)).Append(")SqlHelper.FromDbValue(row["") .Append(column.ColumnName).AppendLine(""]);"); } sb.Append(" ").AppendLine("return model;"); sb.AppendLine("}"); //tomodel的結束 //listall開始 sb.Append("public IEnumerable<").Append(table) .AppendLine("> ListAll()").AppendLine("{"); sb.Append(" ").Append("List<").Append(tablename).Append("> list=new List<") .Append(tablename).AppendLine(">();"); sb.Append("DataTable dt = SqlHelper.ExecuteDataTable("") .Append("select * from " + tablename).AppendLine("");"); sb.AppendLine("foreach (DataRow row in dt.Rows)"); sb.Append(tablename).AppendLine(" model=ToModel(row);"); sb.AppendLine("list.Add(model);}"); sb.AppendLine("}"); //生成器要求列名必須是Id,類型必須是Guid //Insert開始 //public void Insert(Operator op) sb.Append("public void Insert(") .Append(tablename).AppendLine(" model){"); //SqlHelper.ExecuteNonQuery(@"insert into T_Operator( sb.Append("SqlHelper.ExecuteNonQuery(@"") .Append("insert into ").Append(tablename).AppendLine("("); string[] colNames = GetColumnNames(table); sb.AppendLine(string.Join(",", colNames)); string[] colParamNames = GetParamColumnNames(table); sb.Append("values(").AppendLine(string.Join(",", colParamNames)); sb.AppendLine("}"); //Insert結束 sb.AppendLine("}"); txtDALCode.Text = sb.ToString(); } //以數組形式返回列名 private static string[] GetColumnNames(DataTable table) { string[] colnames = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; i++) { DataColumn dataCol = table.Columns[i]; colnames[i] = dataCol.ColumnName; } return colnames; } //以數組形式返回@列名 private static string[] GetParamColumnNames(DataTable table) { string[] colnames = new string[table.Columns.Count]; for (int i = 0; i < table.Columns.Count; i++) { DataColumn dataCol = table.Columns[i]; colnames[i] = "@" + dataCol.ColumnName; } return colnames; } } }

SqlHelper.cs代碼如下:(命名空間里邊的代碼)

namespace MyCodeGen { static class SqlHelper { //app.config文件的繼承: public static readonly string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; //別忘了添加引用 System.configuration 然后在解析到 步驟:右鍵點擊引用--添加引用--.NET--找到System.configuration 確定即可 public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteScalar(); } } } public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset); return dataset.Tables[0]; } } } public static object FromDbValue(object value) { if (value == DBNull.Value) { return null; } else { return value; } } public static object ToDbValue(object value) { if (value == null) { return DBNull.Value; } else { return value; } } } }



好了 全部代碼都好了!點擊運行效果如下:



另外需要完整項目的請點擊:

http://download.csdn.net/detail/u010870518/7837691


如果導入數據庫mdf不熟悉的請參考:

http://blog.csdn.net/xlgen157387/article/details/38844315


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲成人精品一区二区三区 | 久久精品一区二区 | 91久久国产综合久久 | 亚洲成人中文字幕 | 99国产精品视频免费观看一公开 | 国产中文字幕一区 | 91婷婷射| 综合久久国产九一剧情麻豆 | 少妇翘臀亚洲精品av图片 | 午夜在线网站 | 久久69| 红桃视频成人免费网站 | 精品国产31久久久久久 | 91精品国产99久久久 | 国产精品久久久久久久久久久久 | 成人性生交大片免费看视频r | 伊人久久超碰 | 成人毛片免费看 | 91一区二区在线观看 | 日韩精品影视 | 国产精品一区二区三区在线 | 久久精品成人一区二区三区蜜臀 | 精品久久久久久亚洲精品 | 国产尤物视频 | 一级毛片aaaaaa免费看 | 亚洲视频二区 | 国产精品欧美一区二区三区 | 日韩欧美高清视频 | 日本黄色电影网址 | 精品一区在线播放 | 国产精品电影在线观看 | 国产一区二区三区日韩 | 日韩欧美在线免费 | 久久国产午夜 | 日韩免费电影 | 欧美一区二区三区在线观看视频 | 日韩精品国产精品 | 成人在线播放 | 日韩精品中文字幕一区二区 | 久久国产高清 | 丁香午夜 |