自动创建 .NET 2005 数据布局 C# 代码和 SQL 存储过程






1.27/5 (6投票s)
2006年7月14日

80305

512
自动创建 .NET 代码
amende
我的英语很差。说明
这是一个 .NET 2005 Addins,用于根据数据库表逻辑和模板文件自动创建 C# 源代码和
用于操作数据库的 SQL 存储过程。
理论
第一:通过 SQL 系统表或 SQL sp_help
命令获取数据库信息,信息包括表名、表列、表列类型......
public DataSet GetTableInfo(string tableName) { DataSet ds = new DataSet(); SqlDataAdapter adp = new SqlDataAdapter("dbo.sp_help [" + tableName + "]", connSql); try { connSql.Open(); adp.Fill(ds); DataSet dsTmp = new DataSet(); dsTmp = GetTableInfo(dsTmp.Tables[0].Rows[0] ["Name"].ToString(), "name"); ds.Tables[0].Columns.Add("Id"); ds.Tables[0].Rows[0]["Id"] = dsTmp.Tables[0].Rows[0]["Id"]; } catch (Exception e) { string i = e.Message; } finally { connSql.Close(); } return ds; }
第二:根据数据库信息创建表逻辑,并将信息保存到 XML 文件。
第三:创建模板文件
___________________________________________SQL 存储过程模板文件
"@@IDENTITY" /> <add% CREATE PROCEDURE dbo.p_<%tabname%>_Add <%paddparm%> AS BEGIN INSERT INTO [<%tabname%>] <%addintfield%> VALUES <%addvaluefield%> <iden- SET @-outputfield- = @@IDENTITY -iden> END <%GO%> %add> ... ...
___________________________________________源代码模板文件
public class <%class%>OP { private SqlConnection conn=new SqlConnection(@"<%connstr%>"); public <%class%>OP() { } public ArrayList <%tabname%>_Get(out string E) { SqlDataReader dr<%tabname%>=null; SqlCommand cmd<%tabname%>=new SqlCommand(); cmd<%tabname%>.CommandType=CommandType.StoredProcedure; cmd<%tabname%>.Connection=conn; cmd<%tabname%>.CommandText="p_<%tabname%>_Get"; <KEYPAR- cmd#tabname#.Parameters.Add("@#field#",#fieldtype#,#fieldlength#); cmd#tabname#.Parameters["@#field#"].Value=#field#; -keypar> ArrayList al<%tabname%>=new ArrayList(); try { E="1"; conn.Open(); dr<%tabname%>=cmd<%tabname%>.ExecuteReader(); while(dr<%tabname%>.Read()) { <%tabname%> src<%class%>=new <%class%>(); <GETSRC# #getsrc src#tabname#.#field#='#convertstr#(dr#tabname#["#field#"]);'> al<%tabname%>.Add(src<%tabname%>); } } catch(Exception e) { E=e.Message; al<%tabname%>=null; } dr<%tabname%>.Close(); conn.Close(); return al<%tabname%>; } ... ...
第四:根据数据库信息和表
逻辑 XML 文件创建源代码文件,根据数据库信息创建 SQL 存储过程。
(使用数据库信息替换模板文件中的部分代码,
例如:<%tabname%> 是 SQL 表名)
缺陷
模板文件数量不足。希望
希望 .NET 爱好者不断升级创建代码示例
____________________________________________________ .CSusing System; using System.Data; using System.Collections; using System.Data.SqlClient; namespace DodeAutoTest { public class OrderDetailsOP { private SqlConnection conn=new SqlConnection(@"server=info-jinlei\netsdk;database=northwind;user id=sa;pwd=sa"); public OrderDetailsOP() { } public ArrayList OrderDetails_Get(out string E) { SqlDataReader drOrderDetails=null; SqlCommand cmdOrderDetails=new SqlCommand(); cmdOrderDetails.CommandType=CommandType.StoredProcedure; cmdOrderDetails.Connection=conn; cmdOrderDetails.CommandText="p_OrderDetails_Get"; ArrayList alOrderDetails=new ArrayList(); try { E="1"; conn.Open(); drOrderDetails=cmdOrderDetails.ExecuteReader(); while(drOrderDetails.Read()) { OrderDetails srcOrderDetails=new OrderDetails(); srcOrderDetails.OrderID=Convert.ToInt32(drOrderDetails["OrderID"]); ... ...
_____________________________________________________________ SQL 存储过程
ALTER PROCEDURE dbo.p_OrderDetails_UpdByOrderID @OrderID int, @ProductID int, @UnitPrice money, @Quantity smallint, @Discount real AS BEGIN UPDATE [OrderDetails] SET ProductID=@ProductID,UnitPrice=@UnitPrice,Quantity=@Quantity,Discount=@Disco unt WHERE OrderID = @OrderID END GO ... ...