怎么使用.NET 一个自动生成源代码,配合上一篇文章您就可以使用自己产生代码供自己消 费了(上一篇文章请参考:csdn.net/Develop/read_article.asp?id=34659) . 听起来是不是很爽?有些朋友可能会说这个有点难吧, 其实不然. 我们工程里面使用了微软 提供的 CodeDom 命名空间, 所以可以轻松实现. 有关 CodeDom 的详细信息可以参考 MSDN, 上 面 说 的 非 常 清 楚 ! 我 在 这 里 也 就 不 罗 索 了 . 连 接 参 考 : msdn.microsoft/library/en-us/cpref/html/frlrfSystemCodeDom.asp?frame=true 本文介绍一个简单的数据访问层的源代码自动生成的实现,所有的代码都是使用 hard-code 的方式写的,如果您有兴趣可以使用其他的方法,比如数据库(资源文件)中获得资源,生 成源代码,还可以实现一些 O-R Mapping 的操作. 该文章中的数据访问层中有一个属性一个字段以及一个方法. 属性是一个获得连接对象的属 性,字段是一个连接对象的私有成员,方法是一个 Get 方法,得到一个
查询结果集.源代码 生成以后就象下面这个样子: using System; using System.Data; using System.Data.SqlClient; namespace Power.Cuike519 {
public class PowerDataAccess { private SqlConnection m_connection; public PowerDataAccess() { } public virtual SqlConnection Connection { get { return this.m_connection; } set { this.m_connection = value; } } public virtual DataSet GetAllAuthors(string s_State) { try { if (this.m_connection!=null) { System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter(string.Format("select * from authors where state like '{0}'",s_State),this.m_connection); System.Data.DataSet ds = new DataSet();
da.Fill(ds); return ds; } else { return null; } } catch (System.ApplicationException ex) { throw ex; } finally { this.m_connection.Close(); } } } } 下面看看我们用了什么方法生成这段代码的, 为了可以生成该代码我们需要一个工程, 我建 立了一个 Windows 应用程序来做这件事情,你也可以使用控制台或者 ASP.
NET 程序将你生 成的源代码发布到
网络上让更多的人看到.我们在工程里面写了一个方法 CreatePowerDataAccessLayer,该方法创建了上面的源代码,下面我们就看看源代码的片断: 首先我们需要一个保存
源代码的流,我们使用下面的代码创建流: Stream codeStream = File.Open("sample.cs", FileMode.Create); StreamWriter codeWriter = new StreamWriter(codeStream);
接着我们想要编写的是 CSharp 的代码那么我们就使用 CSharpCodeProvider 来创建一个代码 生成器. CSharpCodeProvider provider = new CSharpCodeProvider(); ICodeGenerator codeGenerator = provider.CreateGenerator(codeWriter); CodeGeneratorOptions codeGeneratorOptions = new CodeGeneratorOptions();
为了可以让我们的源代码可以正确运行我们使用下面方法为我们的源代码添加命名空间 CodeSnippetCompileUnit literal = new CodeSn
ippetCompileUnit("using System;\nusing System.Data;\nusing System.Data.SqlClient;\n"); codeGenerator.GenerateCodeFromCompileUnit(literal,codeWriter,codeGeneratorOptions);
接着我们就要为我们的源代码设置一个命名空间以及在此命名空间下面创建一个类 CodeNamespace codeNamespace = new CodeNamespace("Power.Cuike519");//命名空间名称 CodeTypeDeclaration codeTypeDeclaration = new CodeTypeDeclaration(); codeTypeDeclaration.Name = "PowerDataAccess"; // 类名 codeTypeDeclaration.IsClass = true;
codeTypeDeclaration.TypeAttributes = TypeAttributes.Public; codeNamespace.Types.Add(codeTypeDeclaration);
接着我们为该类创建一个构造函数,这里只创建一个默认的构造函数