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("成功");
}