WEB开发网
开发学院软件开发C语言 C#发现之旅:基于反射和动态编译的快速ORM框架(下... 阅读

C#发现之旅:基于反射和动态编译的快速ORM框架(下)

 2010-09-30 21:08:22 来源:WEB开发网   
核心提示: 这段代码结构比较简单,首先是对参数进行判断,C#发现之旅:基于反射和动态编译的快速ORM框架(下)(6),然后设置SQL更新语句,然后将所有的属性的值依次添加到SQL参数列表中

这段代码结构比较简单,首先是对参数进行判断,然后设置SQL更新语句,然后将所有的属性的值依次添加到SQL参数列表中,最后还为查询将EmployeeID值添加到SQL参数列表中。

在代码生成器中生成FillUpdateCommand代码文本的代码为

myWriter.WriteLine("public override int FillUpdateCommand( System.Data.IDbCommand cmd , object objRecord )");
myWriter.BeginGroup("{");
if (KeyProperties.Count == 0)
{
    myWriter.WriteLine("throw new NotSupportedException(\"FillUpdateCommand\");");
}
else
{
    myWriter.WriteLine("if( cmd == null ) throw new ArgumentNullException(\"cmd\");");
    myWriter.WriteLine("if( objRecord == null ) throw new ArgumentNullException(\"objRecord\");");
    myWriter.WriteLine(RecordType.FullName + " myRecord = objRecord as " + RecordType.FullName + " ;");
    myWriter.WriteLine("if( myRecord == null ) throw new ArgumentException(\"must type '" + RecordType.FullName + "' \");");
    // 更新用SQL语句文本
    System.Text.StringBuilder myUpdateSQL = new System.Text.StringBuilder();
    // 所有的SQL参数名称
    System.Collections.ArrayList ParameterNames = new System.Collections.ArrayList();
    foreach (System.Reflection.PropertyInfo p in ps)
    {
        if (p.CanRead == false)
        {
            continue;
        }
        string FieldName = this.GetBindFieldName(p);
        if (myUpdateSQL.Length > 0)
        {
            myUpdateSQL.Append(" , ");
        }
        if (bolNamedParameter)
        {
            string pName = "Value" + p.Name;
            ParameterNames.Add( pName );
            myUpdateSQL.Append(FixFieldName(FieldName) + " = @" + pName);
        }
        else
        {
            myUpdateSQL.Append(FixFieldName(FieldName) + " = ? ");
        }
    }//foreach
    ParameterNames.AddRange(KeyParameterNames);
    myUpdateSQL.Insert(0, "Update " + FixTableName(TableName) + " Set ");
    myUpdateSQL.Append(" Where " + myWhereSQL.ToString());
 
    myWriter.WriteLine("");
    myWriter.WriteLine("cmd.CommandText = @\"" + myUpdateSQL.ToString() + "\" ;");
    myWriter.WriteLine("cmd.Parameters.Clear();");
    myWriter.WriteLine("System.Data.IDbDataParameter parameter = null ;");
    myWriter.WriteLine("");
    System.Collections.ArrayList ps2 = new System.Collections.ArrayList();
    ps2.AddRange(ps);
    ps2.AddRange(KeyProperties);
 
    foreach (System.Reflection.PropertyInfo p in ps2)
    {
        if (p.CanRead == false)
        {
            continue;
        }
        myWriter.WriteLine("");
        myWriter.WriteLine("parameter = cmd.CreateParameter();");
        WriteSetParameterValue(p, myWriter);
        if (bolNamedParameter)
        {
            // 设置SQL命令对象的名称
            myWriter.WriteLine("parameter.ParameterName = \"" + ParameterNames[0] + "\";");
            ParameterNames.RemoveAt(0);
        }
        myWriter.WriteLine("cmd.Parameters.Add( parameter );");
    }//foreach
    myWriter.WriteLine("");
    myWriter.WriteLine("return " + ps2.Count + " ;");
}//else
myWriter.EndGroup(")//public override int FillUpdateCommand( System.Data.IDbCommand cmd , object objRecord )");

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:发现 之旅 基于

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接