C#發現之旅第十二講 基於反射和動態編譯的快速ORM架構(下)

來源:互聯網
上載者:User

對於字串類型的屬性,其預設值就是“DBNull”。而對於其他的整數或者日 期類型的屬性,並沒有預設值,因此是無條件的插入到資料庫中。

我們使用以下的代 碼來產生上述代碼文本

myWriter.WriteLine("public override int  FillInsertCommand( System.Data.IDbCommand cmd , object objRecord )");
myWriter.BeginGroup("{");
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  + "' \");");
myWriter.WriteLine("System.Collections.ArrayList  myFieldNames = new System.Collections.ArrayList();");
myWriter.WriteLine ("System.Collections.ArrayList myValues = new System.Collections.ArrayList ();");
for (int iCount = 0; iCount < ps.Length; iCount++)
{
    System.Reflection.PropertyInfo p = ps[iCount];
    if  (p.CanRead == false)
    {
        continue;
     }

    BindFieldAttribute fa = (BindFieldAttribute) Attribute.GetCustomAttribute(
        p, typeof (BindFieldAttribute));
    string FieldName = GetBindFieldName(p);

    myWriter.WriteLine("");
    Type pt =  p.PropertyType;
    object DefaultValue = this.GetDefaultValue(p);
    if (pt.Equals(typeof(string)))
    {
         myWriter.WriteLine("if( myRecord." + p.Name + " != null &&  myRecord." + p.Name + ".Length != 0 )");
         myWriter.BeginGroup("{");
        myWriter.WriteLine ("myFieldNames.Add( \"" + FieldName + "\" );");
         myWriter.WriteLine("myValues.Add( myRecord." + p.Name + " );");
         myWriter.EndGroup("}");
    }
    else if  (pt.Equals(typeof(DateTime)))
    {
         myWriter.WriteLine("myFieldNames.Add( \"" + FieldName + "\" );");
         if (fa.WriteFormat != null && fa.WriteFormat.Length  > 0)
        {
            myWriter.WriteLine ("myValues.Add( myRecord." + p.Name + ".ToString(\"" + fa.WriteFormat +  "\") );");
        }
        else
         {
            myWriter.WriteLine("myValues.Add( myRecord." +  p.Name + ".ToString(\"yyyy-MM-dd HH:mm:ss\") );");
        }

    }
    else
    {
         myWriter.WriteLine("myFieldNames.Add( \"" + FieldName + "\" );");
         myWriter.WriteLine("myValues.Add( myRecord." + p.Name +  " );");
    }
}//for
myWriter.WriteLine("");
myWriter.WriteLine("if( myFieldNames.Count == 0 ) return 0 ;");
myWriter.WriteLine("cmd.Parameters.Clear() ;");
myWriter.WriteLine ("System.Text.StringBuilder mySQL = new System.Text.StringBuilder();");
myWriter.WriteLine("mySQL.Append( \"Insert Into " + TableName + " ( \"  );");
myWriter.WriteLine("mySQL.Append( ConcatStrings( myFieldNames  ));");
myWriter.WriteLine("mySQL.Append( \" ) Values ( \" );");
myWriter.WriteLine("for( int iCount = 0 ; iCount < myValues.Count ;  iCount ++ )");
myWriter.BeginGroup("{");
myWriter.WriteLine("if(  iCount > 0 ) mySQL.Append(\" , \" );");
if (bolNamedParameter)
{
    myWriter.WriteLine("mySQL.Append(\" @Value\" + iCount )  ;");
    myWriter.WriteLine("System.Data.IDbDataParameter parameter  = cmd.CreateParameter();");
    myWriter.WriteLine("parameter.Value =  myValues[ iCount ] ;");
    myWriter.WriteLine ("parameter.ParameterName = \"Value\" + iCount ;");
     myWriter.WriteLine("cmd.Parameters.Add( parameter );");
}
else
{
    myWriter.WriteLine("mySQL.Append(\" ? \") ;");
     myWriter.WriteLine("System.Data.IDbDataParameter parameter =  cmd.CreateParameter();");
    myWriter.WriteLine("parameter.Value =  myValues[ iCount ] ;");
    myWriter.WriteLine("cmd.Parameters.Add(  parameter );");
}
myWriter.EndGroup("}//for");
myWriter.WriteLine("mySQL.Append( \" ) \" );");
myWriter.WriteLine ("cmd.CommandText = mySQL.ToString();");
myWriter.WriteLine("return  myValues.Count ;");
myWriter.EndGroup(")//public override int  FillInsertCommand( System.Data.IDbCommand cmd , object objRecord  )");

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.