新濠天地 > 新濠编程网 > 将表名抓取到表名的下拉框中

原标题:将表名抓取到表名的下拉框中

浏览次数:195 时间:2019-09-25

---恢复生机内容初叶---

代码生成器的原理很轻易,就是经过读取数据库的表结构,依据读取到的数据组合成代码,三个最基础的代码生成器有以下几点

一 生成器分界面,作者用的是winform,分界面如图

图片 1

首先行是数据库链接字符串,点击侧边的测量试验连接,就足以测量试验数据库链接字符串是否准确。

若是测验链接成功后,自动抓取数据库的具有表,将表名抓取到表名的下拉框中,表名的下拉框也变成可编写制定的,右边的主键的下拉框,也会暗中同意抓取左边表的主键。

点击按键,生成代码到上边包车型地铁文本框中

点击开关,生成代码到相应的cs文件下,文件路线为保留路线加表名

二 代码解释

  1.抓取数据库中具有的表,宗旨代码如下:

//获得数据库所有表名string sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'";dt = ResultDataTable;//表名 string[] tables = new string[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++){      DataRow row = dt.Rows[i];      tables[i] = (string)row["TABLE_NAME"];}//把表名放在下拉框中cmbTables.DataSource = tables;cmbTables.SelectedIndex = 0;

  ResultDataTable方法如下:

    public DataTable ResultDataTable(string sql, params SqlParameter[] parameters)    {        using (SqlConnection connstr = new SqlConnection(txtConnStr.Text))        {            //打开数据库连接            connstr.Open();            using (SqlCommand command = connstr.CreateCommand            {                command.CommandText = sql;                command.Parameters.AddRange(parameters);                SqlDataAdapter sda = new SqlDataAdapter;                DataSet ds = new DataSet();                //获取表中的全部信息(如填充每个表中的主键和外键等)                sda.FillSchema(ds, SchemaType.Source);                sda.Fill;                return ds.Tables[0];            }        }    }

  2.生成代码到文本框中,先经过表名获取表的全部列,然后依照全数的列生成代码

//获取表名string tableName = cmbTables.SelectedValue.ToString();//获取字段名DataColumnCollection columns = Returncolumns(tableName);//将生成的代码填入文本框中txtCode.Text = CreateModelCode;

  根据表名重返表中全体列名的不二等秘书技Returncolumns

/// <summary>/// 返回数据表列名/// </summary>/// <param name="tablename">表名</param>/// <returns></returns>public DataColumnCollection Returncolumns(string tablename){DataTable datatable = ResultDataTable("select top 0 * from " + tablename);DataColumnCollection columns = datatable.Columns;return columns;}

  根据列名生成代码的办法CreateModelCode()。这几个措施是浮动的实体类,因为变化实体类最简便易行,所以用那几个做例子。。。

/// <summary>/// 生成Model代码/// </summary>/// <param name="columns"></param>public string CreateModelCode(DataColumnCollection columns){StringBuilder sb = new StringBuilder();sb.Append("public class ").AppendLine(cmbTables.SelectedValue.ToString.AppendLine("{");foreach (DataColumn column in columns){sb.Append(" public ").Append(ColumnType.Append(" ");//例如 public string sb.Append(column.ColumnName); //例如 public string Idsb.AppendLine(" { get; set; }");//例如 public string Id { get; set;}}sb.Append("}");return sb.ToString();}

  3.生成代码到CS文件中,完成形式跟输入到文本框中是一律的,只然则最终一步是生成一个新的文书,首要代码:

//判断文件目录是否存在string directory = txtDir.Text.Trim();if (string.IsNullOrWhiteSpace(directory)){MessageBox.Show("请输入文件地址");return;}if (!Directory.Exists(directory)){MessageBox.Show("路径不对,请重新输入");}string tableName = cmbTables.SelectedValue.ToString();DataColumnCollection columns = Returncolumns(tableName);string fileName = tableName + ".cs";string filePath = directory + "\" + fileName;string fileStr = CreateModelCode;try{MyCommonTools.WriteToFile(filePath, fileStr, true);MessageBox.Show("生成成功");}catch (Exception exception){MessageBox.Show("生成代码出错");throw exception;}

  WriteToFile()方法代码在下边:

/// <summary>/// 将字符串写入到文件中/// </summary>/// <param name="filePath">文件的实际路径</param>/// <param name="content">内容</param>/// <param name="isCover">是否覆盖,true就是重新写一遍,false就是往里面添加内容</param>public static void WriteToFile(string filePath, string content, bool isCover){  FileStream fs = null;  try  {    if (!isCover && System.IO.File.Exists)    {      fs = new FileStream(filePath, FileMode.Append, FileAccess.Write);      StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);      sw.WriteLine;      sw.Flush();      sw.Close();    }    else    {      System.IO.File.WriteAllText(filePath, content, Encoding.UTF8);    }  }  finally  {    if (fs != null)    {    fs.Close();    }  }
}

代码:

那是二个最基础的例证,仅仅能提供一种思路,然后那个事例也是参考了别人的篇章,地址在此处:

本文由新濠天地发布于新濠编程网,转载请注明出处:将表名抓取到表名的下拉框中

关键词:

上一篇:新濠天地socket

下一篇:没有了