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:发现 之旅 基于

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