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