CodeConstructor codeConstrustor = new CodeConstructor(); codeConstrustor.Attributes = MemberAttributes.Public; codeTypeDeclaration.Members.Add(codeConstrustor);
接着为我们的类创建一个字段,该字段是私有的,它是 SqlConnection 类型的名字叫 m_connection CodeMemberField codeMember = new CodeMemberField(); codeMember.Name = "m_connection"; codeMember.Attributes = MemberAttributes.Private; codeMember.Type = new CodeTypeReference("SqlConnection"); codeTypeDeclaration.Members.Add(codeMember);
有了字段我们为该字断添加一个可以操作和读取的属性,我们为它指定 set 和 get 方法,同 时它是 public 的,是 SqlConnection 类型的,如下所示: CodeMemberProperty codeMemberProperty = new CodeMemberProperty(); codeMemberProperty.Name = "Connection"; codeMemberProperty.Attributes = MemberAttributes.Public; codeMemberProperty.Type = new CodeTypeReference("SqlConnection"); codeMemberProperty.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"m_connection"))); codeMemberProperty.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(),"m_connection"),new CodePropertySetValueReferenceExpression())); codeTypeDeclaration.Members.Add(codeMemberProperty);
为了让我们的类看起来更有用我们使用下面的方法创建一个函数以及函数里面的内容, 这里 可以一次将函数体写入其中, 这里没有这样做的原因是可以提供一个机会, 看到微软在该命 名空间下提供了其他很多有关源代码中使用的语句的类.
它是 public 的返回的是 DataSet 类型的方法的名字叫 GetAllAuthors. 虽然叫这个名字但是我 们还是提供了一个参数, 以提供更加灵活的使用空间, 同时也为了说明函数中使用参数的方 法. CodeMemberMethod codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Name = "GetAllAuthors"; codeMemberMethod.Attributes = MemberAttributes.Public;
codeMemberMethod.ReturnType = new CodeTypeReference("DataSet"); codeMemberMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(string),"s_State"));
为了让我们的源代码更强壮我们使用了 try-catch-finnaly 语句,
就像下面这样: CodeTryCatchFinallyStatement try1 = new CodeTryCatchFinallyStatement();
为了判断我们的 m_connection 是不是已经初始化了我们使用下面的判断语句来判断: CodeConditionStatement conditionalStatement = new CodeConditionStatement(); conditionalStatement.Condition = new CodeVariableReferenceExpression("this.m_connection!=null");
我们在条件为真的时候希望我们的源代码执行下面的代码: CodeVariableDeclarationStatement variableDeclarationDA = new CodeVariableDeclarationStatement(typeof(System.Data.SqlClient.SqlDataAdapter),"da",new CodeVariableReferenceExpression("new SqlDataAdapter(string.Format(\"select * from authors where state like '{0}'\",s_State),this.m_connection)") ); conditionalStatement.TrueStatements.Add(variableDeclarationDA); CodeVariableDeclarationStatement variableDeclarationDS = new CodeVariableDeclarationStatement(typeof(DataSet),"ds",new CodeVariableReferenceExpression("new DataSet()") ); conditionalStatement.TrueStatements.Add(variableDeclarationDS); CodeExpression invokeExpression = new CodeMeth