数据库字段名映射(代码生成)
        在开发中,数据库中的表有众多字段,在读取和写入这些字段时,需要一次次的把它们重复的写,在写的过程还可能写错(打错一个字母或者打漏一个字母等小错误)。因此,我们可以利用以下方法生成代码。达到快速编码,而又减少错误的目的。
        我们一般都把这些数据库的表字段声明字符串常量,如以下形式:
        public const string DutyPsnName = "DUTY_PSN_NAME";
        我们数据库字段的命名规则为用“下划线分开有含义的单词”;而对程序中字符串常量命名为“实义的单词首个字母大写”。如上。
        对数据库中某个表,读取所有的列名(字段)。
select * from dbo.syscolumns where [id] in

(
select TOP 1 [id] from sysobjects where type = N'U' and [name] = 'Some_Table')
        根据我们的规则生成我需要的代码。

#region 数据库字段名映射代码生成

            Database db 
= DatabaseFactory.CreateDatabase("CITYADMIN");            

            

            DBCommandWrapper cmd 
= db.GetStoredProcCommandWrapper("stp_Tables");



            
using (IDataReader dr = db.ExecuteReader(cmd))

            
{

                
int count = 0;

                
while (dr.Read())

                
{

                    count 
++ ;

                    
string columnName = dr["name"].ToString();

                    
//string temp = columnName.Replace("_", "").ToLower();



                    
int length = columnName.Length;

                    
int i = 0;

                    
string finalString = string.Empty;

                    
if(columnName.IndexOf("_"0< 0)

                        finalString 
= columnName.Substring(0,1+ columnName.Substring(1).ToLower();

                    
else

                    
{

                        
int tempLength = 0;

                        
bool isOut = false;

                        
while(!isOut)

                        
{    

                            
if(columnName.IndexOf("_", i) < 0 )

                            
{

                                isOut 
= true;

                                tempLength 
= length - columnName.LastIndexOf("_"- 1 - 1;

                            }


                            
else

                                tempLength 
= columnName.IndexOf("_", i) - i - 1;

                            
string str = columnName.Substring(i,1+ columnName.Substring( i+1, tempLength).ToLower();

                            finalString 
+= str;

                            
if(columnName.IndexOf("_", i) > 0)

                                i 
=  columnName.IndexOf("_", i) + 1;

                        }


                    }




                    Console.WriteLine();

                    Console.WriteLine(
"/// <summary>");

                    Console.WriteLine(
"///");

                    Console.WriteLine(
"/// </summary>");

                    Console.WriteLine(
"public const string " + finalString + " = \"" + columnName + "\";");

                }


                
            }


            
#endregion

posted on 2005-08-22 22:34  凌霄城上的狗  阅读(1523)  评论(0)    收藏  举报