C#发现之旅:基于反射和动态编译的快速ORM框架(下)
2010-09-30 21:08:22 来源:WEB开发网这段代码结构比较简单,首先是对参数进行判断,然后设置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 )");
更多精彩
赞助商链接