贡献代码: 数据库快数开发接口

原创 2004年08月05日 11:43:00

数据库开发中最烦人的就是录入和编辑,  写了很长的 sql 不说, 其中还有类型转换,    sql 语句写的对不对自己根本不知道, 还需要自己去亲自调试半天,  况且只有在运行时才知道  sql 对与否.  一旦数据库如果因为需求更改 , 那么整条 sql 语句就有大的更改,  感觉数据库开发 简直就是在拼接sql字符串, 有没有办法脱离这个恶梦呢?   如果向对象一样使用数据库就好了,  下面是我开发积累的一点小经验,  拙作拿出来和大家一起分享,希望一起完善它.

目的: 以后您不用再为 insert 和  update  写sql , 也不用烦人的调试了.一次成功 . 
如果一个表中有 100 个字段, 也不用担心写很长的 sql 字符串,中间也无需做任何数据类型转换,  如果想更方便你可以用 orm
可以参考 orm.net , 

-----------------asp.net 下用法如下-----------------------------------------

Mis db = new Mis();
db.TableName = “Test”;
或者  Mis db = new Mis(“tablename“ );
db.beginInsert();
db.save(“column1“, IntTypevalue1);
db.save(”column2”, DoubleTypeValue2);
db.save(”column3”, DateTimeTypeValue3);
db.endInsert()

更新示例:

Mis db = new Mis(“tablename“);
db.beginUpdate();
 db.save(“column1“, 123.221); // float
db.save(“coilumn“, “test“); //字符
db.updateWhere( “id=100“ );   // update table1 set A=11 where id = ?
db.endUpdate();

 

-------------------------------------------------公开代码------------------------------------------

//版权所有, 如需要转载, 请注明出处, 可以不通知本人   chaiwei Net@hotmail.com    2004.8 publish 

using System;
using System.Collections;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace chaiwei.Db
{
 /// <summary>
 ///  构造  sql 语句,
 ///  因为  sql insert 里面的列可以没有循序, 所以我们部需要对每个值进行检查,
 ///  连接字符串,构成一个  insert sql
 /// </summary>
 public class Mis
 {

  public Mis()
  { 
   m_hstable = new Hashtable();
  }

  public Mis( string table)
  {
  
   m_table = table ;
   m_hstable = new Hashtable();
  }
  protected string    m_table;
  protected Hashtable m_hstable;  // 哈西键值表
  protected string    m_strWhere;  // 更新条件设置


  //
  //
  //
  public string TableName
  {
   get
   {
    return m_table;
   }
   set
   {
    m_table= value;
   }
  }

  public static int getLastID( string tableName)
  {
   DbClass db= new DbClass();
   db.InitConnection("conn");
   string sql = " select IDENT_CURRENT('"+ tableName +"')";
   SqlDataReader reader = db.ExecuteSqlDataReader( sql );

   if( reader.Read())
   {
    if ( reader.IsDBNull(0))
     return -1;
    else
    {
     int ret = System.Convert.ToInt32( reader.GetValue(0));
     return ret;

    }
    
   }
   return -1;
  }


  //
  //
  //
 
  public static string getSheetType1(int id)
  {
   string retVal = "";
   DbClass db = new DbClass();
   db.InitConnection("conn");
   string sql = "select Description from SheetType1 where id = " + id.ToString() + "";
   SqlDataReader reader = db.ExecuteSqlDataReader( sql) ;
   while( reader.Read())
   {
    retVal = reader.GetString(0);
   }

   return retVal;
  }
  //
  //
  //
  public void beginInsert()
  {
   // 可以做一些检查
  }

  //
  //
  //
  public void endInsert()
  {
   if( m_table == null || m_table.Length <1 )
    return;
   string sql = getInsertSQL() ;

   DbClass db = new DbClass();
   db.InitConnection("conn");
   db.ExecuteNonQuery( sql );
   db.CloseConn();  
  }

  //
  //
  //
  public void beginUpdate()
  {
  
  }
  //
  //
  //
  public void updateWhere(string where)
  {
   m_strWhere = where;
  }
  //
  //
  //
  public void endUpdate()
  {
   if( m_table == null || m_table.Length <1 || m_strWhere == null ||  m_strWhere.Length<1 )
    return;   
   string sql = getUpdateSQL( );
   DbClass db = new DbClass();
   db.InitConnection("conn");
   db.ExecuteNonQuery( sql );
   db.CloseConn();
  }

  //
  // 特别增加的一种,在页面上无需类型转换
  //
  public virtual  void save( string ColumnName , string  ColumnValue, bool isTxt)
  {
   if( isTxt == true )
   {      
    m_hstable.Add( ColumnName, "'"+ ColumnValue + "'");
   }
   else
   {
    m_hstable.Add( ColumnName, "'"+ ColumnValue + "'");
   }
  }

 
  //
  //
  //
  public virtual void  save( string ColumnName , string  ColumnValue)
  {
   // 存入字符集合之中  
   m_hstable.Add( ColumnName, "'"+ ColumnValue + "'");   
  }
  //
  //
  //
  public virtual void  save(string ColumnName , bool  ColumnValue)
  {
   if(ColumnValue == true )
    m_hstable.Add( ColumnName, "1");
   else
    m_hstable.Add( ColumnName, "0");

  }
  //
  //
  //
  public virtual void  save(string ColumnName , int  ColumnValue)
  {
        
   string val =  System.Convert.ToString(ColumnValue); 
   m_hstable.Add( ColumnName,  val );
  
  }
  //
  //
  //
  public virtual void   save(string ColumnName , float  ColumnValue)
  {  
   m_hstable.Add( ColumnName, ColumnValue.ToString());
  }
  //
  //
  //
  protected string getInsertSQL()
  {  
   IDictionaryEnumerator myEnumerator = m_hstable.GetEnumerator();    
   StringBuilder sql_key = new StringBuilder();
   StringBuilder sql_val = new StringBuilder();
   string key = "" ;
   string val = "" ;
   int count= 0 ; // 枚举计数
   while ( myEnumerator.MoveNext() )
   {
    count ++ ;

    key =  myEnumerator.Key.ToString() ;
    val =  myEnumerator.Value.ToString() ;       
    sql_key.Append( key );
    sql_val.Append( val);
    if( m_hstable.Count <= count  )
    {    
     continue;       
    }
    else
    {
     sql_key.Append(",");
     sql_val.Append(",");     
    }  
   }
   string sql ;
   sql = "insert into " +  m_table +"( " + sql_key +  " )values("  + sql_val + " )";
   m_hstable.Clear();
   return  sql;
  } 
  //
  //
  //
  protected string getUpdateSQL()
  {
   if( m_strWhere== null || m_strWhere.Length <1)
    return null;
  
   string sql_set ;   
   IDictionaryEnumerator myEnumerator = m_hstable.GetEnumerator();    
   StringBuilder sql_a = new StringBuilder();
   
   string key = "" ;
   string val ="" ;
   int count= 0 ; // 枚举计数
   while ( myEnumerator.MoveNext() )
   {
    count ++ ;
    key =  myEnumerator.Key.ToString() ;
    val =  myEnumerator.Value.ToString() ;    
    string setVal =  key + " = " + val ;
    sql_a.Append( setVal );
    if( m_hstable.Count <= count  )
    {    
     continue;        
    }
    else
    {
     sql_a.Append(",");      
    }  
   }
   sql_set = sql_a.ToString();
   string sql =  " update " + m_table + " set  "   + sql_set +  " where " + m_strWhere ;
   return sql;
  }

  
 }// end class
}

 

统计本地Git仓库中不同贡献者的代码行数的一些方法

简单的查看和统计 1.显示所有贡献者及其commit数git shortlog –numbered –summary2.只看某作者提交的commit:git log –author=”eisneim...
  • hp910315
  • hp910315
  • 2016年08月13日 09:23
  • 2304

深度解读OpenStack Mitaka国内代码贡献

转眼间,OpenStack又迎来了新版本发布的日子,这是OpenStack第13个版本,也是Big Tent后的第二个版本,秉承“公开公正”的原则,OpenStack Release的项目达到了29个...
  • xiaoquqi
  • xiaoquqi
  • 2016年04月11日 21:10
  • 5160

精确统计github贡献者的代码行数

github的仓库是可以统计每个贡献者的代码行数的,公司年会的时候,特设了一个“码神奖”,颁给去年贡献代码最多的工程师,github的统计数据显示,这位大神去年提交的代码达到了110w行,这个数据太惊...
  • u012973744
  • u012973744
  • 2014年01月23日 17:04
  • 15348

用vc开发gis程序的代码,电子书可以在网上下载,希望大家多贡献多交流.rar

  • 2008年09月04日 13:36
  • 391KB
  • 下载

git@osc中协作开发、复制项目、贡献代码

git@osc可以让我们托管代码,进行版本控制,同svn等类似平台一样,可以帮助我们实现团队协作开发,无论你是否是项目团队成员。本教程完全适用GitHub 1. 概念 协作开发:顾...
  • a137268431
  • a137268431
  • 2015年03月10日 14:09
  • 963

统计本地Git仓库中不同贡献者的代码行数的一些方法

简单的查看和统计 1.显示所有贡献者及其commit数git shortlog –numbered –summary2.只看某作者提交的commit:git log –author=”eisneim...
  • hp910315
  • hp910315
  • 2016年08月13日 09:23
  • 2304

Hadoop十岁了,核心代码行数已170万+、贡献者800+

Hadoop正式诞生于2006年1月28日,它是一个开源项目的生态系统,从根本上改变了企业存储、处理和分析数据的方式。跟传统系统的区别是,Hadoop可以在相同的数据上同时运行不同类型的分析工作。...
  • yaoxiaochuang
  • yaoxiaochuang
  • 2016年02月03日 02:31
  • 1121

精确统计github贡献者的代码行数

github的仓库是可以统计每个贡献者的代码行数的,公司年会的时候,特设了一个“码神奖”,颁给去年贡献代码最多的工程师,github的统计数据显示,这位大神去年提交的代码达到了110w行,这个数据太惊...
  • u012973744
  • u012973744
  • 2014年01月23日 17:04
  • 15348

Git+GitHub创建分支&提交并贡献代码(Linux环境)

根据github官网的教程,创建一个Spoon-Knife项目的分支https://github.com/octocat/Spoon-Knife 1、在github创建指定项目分支 登陆g...
  • IT_YUAN
  • IT_YUAN
  • 2013年06月25日 11:36
  • 777

Linux内核工程导论——如何贡献内核代码

内核开发周期 你写好了一部分内核代码要提交给内核的恰当时机是当内核的合并窗口打开的时候,一般持续2个周,之后发布rc1版本,rc1之后一般只对合并窗口添加的代码进行测试和修改,而不添加新的功能(新的硬...
  • ljy1988123
  • ljy1988123
  • 2015年10月08日 20:35
  • 1172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:贡献代码: 数据库快数开发接口
举报原因:
原因补充:

(最多只允许输入30个字)