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

数据库开发中最烦人的就是录入和编辑,  写了很长的 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
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值