oracle通过表明创建实体类

老早前打算写一个实体类生成器,因为各种各样的原因没有写(自我感觉就是懒)!花了半天写了一个初步的实体类生产期,更具自己的项目需求写的,并不是太完善!

DataTable dt = new DataTable();
using ( OracleConnection conn = new OracleConnection(help.connstring))
{

OracleDataAdapter sda = new OracleDataAdapter("select t.TABLE_NAME from user_tables t", conn);
DataSet Ds = new DataSet();
sda.Fill(Ds, "user_tables");

this.dataGridView1.DataSource = Ds.Tables["user_tables"];
conn.Close();
}

 

查询库中表明并且绑定到dataGridView中,

查询到表明后,就要通过表明查询这个表的地段,以及类型

public DataTable DtClass(string tname) {

DataTable dt = new DataTable();
using ( OracleConnection conn = new OracleConnection(help.connstring))
{

OracleDataAdapter sda = new OracleDataAdapter("select t.COLUMN_NAME,t.DATA_TYPE from user_tab_columns t where Table_Name='" + tname + "'", conn);
DataSet Ds = new DataSet();


sda.Fill(Ds);
dt= Ds.Tables[0];

conn.Close();
}

return dt;
}

将表的字段和类型转换成实体类创建实体类 Entity_Class

public class Entity_Class
{
/// <summary>
/// 字段名
/// </summary>
public string COLUMN_NAME { get; set; }


/// <summary>
/// 类型
/// </summary>
public string DATA_TYPE { get; set; }
}

通过以下方法将datatable 转换成实体类

public class ModelConvertHelper<T> where T : new()
{

public static IList<T> ConvertToModel(DataTable dt)
{

IList<T> ts = new List<T>();// 定义集合
Type type = typeof(T); // 获得此模型的类型
string tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;
if (dt.Columns.Contains(tempName))
{
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}


}

获取实体类后我们就好处理了

private void button1_Click(object sender, EventArgs e)
{
var Temp = new StringBuilder();
var t = dataGridView1.CurrentCell.Value.ToString();//表明
var dt = DtClass(t);
Temp.AppendLine(" public class " + t + "{");
var model = ModelConvertHelper<Entity_Class>.ConvertToModel(dt);
for (int i = 0; i < model.Count; i++)
{
var a = model[i];

var str = a.COLUMN_NAME.Substring(0, 1).ToUpper() + a.COLUMN_NAME.Substring(1).ToLower();
Temp.AppendLine("public " + SharedClass.GetType(a.DATA_TYPE) + " " + str+ " { get;set; }");

}
Temp.Append("}");
using (FileStream aFile = new FileStream(@"E:\\"+t+".cs", FileMode.OpenOrCreate))
{
using (StreamWriter sw = new StreamWriter(aFile, Encoding.UTF8))
{

sw.WriteLine("using System;");
sw.WriteLine("using System.Collections.Generic;\r\nusing System.IO;");
sw.WriteLine("namespace ConsoleApplication1\r\n{\r\n");
sw.WriteLine(Temp);
sw.WriteLine("}\r\n");

}
}
MessageBox.Show("成功");


}

posted @ 2017-11-24 14:33  取名字最烦了  阅读(1151)  评论(2编辑  收藏  举报