隨筆-295  評論-26  文章-1  trackbacks-0

          using System;
          using System.Data;
          using System.Data.SqlClient;

          namespace com.hua..li
          {
          ?/// <summary>
          ?/// 數據庫操作
          ?/// </summary>
          ?public class pathDB:pathPage
          ?{

          ??override protected void OnInit(EventArgs e)
          ??{
          ???pathInit();
          ???base.OnInit(e);
          ??}

          ??protected void pathInit()
          ??{
          ???this.ConnectDb();
          ??}

          ??protected void ConnectDb()
          ??{
          ???if(doh == null)
          ???{
          ????System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["connString"]);
          ????doh = new com.path.SqlDbOperHandler(conn);
          ???}
          ??}
          ?}
          }
          using System;

          namespace com.hua.li
          ?{
          ??/// <summary>
          ??/// 表示數據庫連接類型。
          ??/// </summary>
          ??public enum DatabaseType:byte{SqlServer,OleDb};
          ??/// <summary>
          ??/// DbOperHandler 的摘要說明。
          ??/// </summary>
          ??public abstract class DbOperHandler
          ??{
          ???/// <summary>
          ???/// 析構函數,釋放申請的資源。
          ???/// </summary>
          ???~DbOperHandler()
          ???{
          ????conn.Close();
          ???}
          ???/// <summary>
          ???/// 表示數據庫連接的類型,目前支持SqlServer和OLEDB
          ???/// </summary>
          ???protected DatabaseType dbType=DatabaseType.OleDb;
          ???/// <summary>
          ???/// 返回當前使用的數據庫連接對象。
          ???/// </summary>
          ???/// <returns></returns>
          ???public System.Data.IDbConnection GetConnection()
          ???{
          ????return conn;
          ???}
          ???/// <summary>
          ???/// 條件表達式,用于在數據庫操作時篩選記錄,通常用于僅需指定表名稱和某列名稱的操作,如GetValue(),Delete()等,支持查詢參數,由AddConditionParameters指定。。
          ???/// </summary>
          ???public string ConditionExpress=string.Empty;
          ???/// <summary>
          ???/// 當前的SQL語句。
          ???/// </summary>
          ???public string SqlCmd=string.Empty;
          ???/// <summary>
          ???/// 當前操作所涉及的數據表名稱。
          ???/// </summary>
          ???protected string tableName=string.Empty;
          ???/// <summary>
          ???/// 當前操作所設計的字段名稱。
          ???/// </summary>
          ???protected string fieldName=string.Empty;
          ???/// <summary>
          ???/// 當前所使用的數據庫連接。
          ???/// </summary>
          ???protected System.Data.IDbConnection conn;
          ???/// <summary>
          ???/// 當前所使用的命令對象。
          ???/// </summary>
          ???protected System.Data.IDbCommand cmd;
          ???/// <summary>
          ???/// 當前所使用的數據庫適配器。
          ???/// </summary>
          ???protected System.Data.IDbDataAdapter da;

          ??
          ???/// <summary>
          ???/// 用于存儲字段/值配對。
          ???/// </summary>
          ???protected System.Collections.ArrayList alFieldItems=new System.Collections.ArrayList(10);
          ???/// <summary>
          ???/// 用于存儲SQL語句中的查詢參數。
          ???/// </summary>
          ???protected System.Collections.ArrayList alSqlCmdParameters=new System.Collections.ArrayList(5);
          ???/// <summary>
          ???/// 用于存儲條件表達式中的查詢參數。
          ???/// </summary>
          ???protected System.Collections.ArrayList alConditionParameters=new System.Collections.ArrayList(5);
          ???/// <summary>
          ???/// 重值該對象,使之恢復到構造時的狀態。
          ???/// </summary>
          ???public void Reset()
          ???{
          ????this.alFieldItems.Clear();
          ????this.alSqlCmdParameters.Clear();
          ????this.alConditionParameters.Clear();
          ????this.ConditionExpress=string.Empty;
          ????this.SqlCmd=string.Empty;
          ????this.cmd.Parameters.Clear();
          ????this.cmd.CommandText=string.Empty;
          ???}
          ???/// <summary>
          ???/// 添加一個字段/值對到數組中。
          ???/// </summary>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <param name="_fieldValue">字段值。</param>
          ???public void AddFieldItem(string _fieldName,object _fieldValue)
          ???{

          ????for(int i=0;i<this.alFieldItems.Count;i++)
          ????{
          ?????if(((DbKeyItem)this.alFieldItems[i]).fieldName==_fieldName)
          ?????{
          ??????throw new ArgumentException("The field name has existed!");
          ?????}
          ????}
          ????this.alFieldItems.Add(new DbKeyItem(_fieldName,_fieldValue));
          ???}
          ???/// <summary>
          ???/// 添加條件表達式中的查詢參數到數組中。注意:當數據庫連接為SqlServer時,參數名稱必須和SQL語句匹配。其它則只需保持添加順序一致,名稱無需匹配。
          ???/// </summary>
          ???/// <param name="_conditionName">條件名稱。</param>
          ???/// <param name="_conditionValue">條件值。</param>
          ???public void AddConditionParameter(string _conditionName,object _conditionValue)
          ???{
          ????for(int i=0;i<this.alConditionParameters.Count;i++)
          ????{
          ?????if(((DbKeyItem)this.alConditionParameters[i]).fieldName==_conditionName)
          ?????{
          ??????throw new ArgumentException("The condition name has existed!");
          ?????}
          ????}
          ????this.alConditionParameters.Add(new DbKeyItem(_conditionName,_conditionValue));
          ???}

          ???/// <summary>
          ???/// 添加SQL語句中的查詢參數到數組中。注意:當數據庫連接為SqlServer時,參數名稱必須和SQL語句匹配。其它則只需保持添加順序一致,名稱無需匹配。
          ???/// </summary>
          ???/// <param name="_paraName">參數名稱。</param>
          ???/// <param name="_paraValue">參數值。</param>
          ???public void AddSqlCmdParameters(string _paraName,object _paraValue)
          ???{
          ????for(int i=0;i<this.alSqlCmdParameters.Count;i++)
          ????{
          ?????if(((DbKeyItem)this.alSqlCmdParameters[i]).fieldName==_paraName)
          ?????{
          ??????throw new ArgumentException("The sqlcmd parameter name has existed!");
          ?????}
          ????}
          ????this.alSqlCmdParameters.Add(new DbKeyItem(_paraName,_paraValue));
          ???}

          ???public bool Exist(string tableName)
          ???{
          ????return this.GetValue(tableName,"count(*)").ToString()!="0";
          ???}
          ???/// <summary>
          ???/// 抽象函數。用于產生Command對象所需的參數。
          ???/// </summary>
          ???protected abstract void GenParameters();
          ???/// <summary>
          ???/// 根據當前alFieldItem數組中存儲的字段/值向指定表中添加一條數據。在該表無觸發器的情況下返回添加數據所獲得的自動增長id值。
          ???/// </summary>
          ???/// <param name="_tableName">要插入數據的表名稱。</param>
          ???/// <returns>返回本數據連接上產生的最后一個自動增長id值。</returns>
          ???public int Insert(string _tableName)
          ???{
          ???
          ????this.tableName=_tableName;
          ????this.fieldName=string.Empty;
          ????this.SqlCmd="insert into "+this.tableName+"(";
          ????string tempValues=" values(";
          ????for(int i=0;i<this.alFieldItems.Count-1;i++)
          ????{
          ?????this.SqlCmd+=((DbKeyItem)alFieldItems[i]).fieldName;
          ?????this.SqlCmd+=",";

          ?????tempValues+="@para";
          ?????tempValues+=i.ToString();

          ?????tempValues+=",";
          ????}
          ????this.SqlCmd+=((DbKeyItem)alFieldItems[alFieldItems.Count-1]).fieldName;
          ????this.SqlCmd+=") ";

          ????tempValues+="@para";
          ????tempValues+=(alFieldItems.Count-1).ToString();

          ????tempValues+=")";
          ????this.SqlCmd+=tempValues;
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????cmd.ExecuteNonQuery();
          ????cmd.CommandText="select @@identity as id";
          ????int autoId=Convert.ToInt32(cmd.ExecuteScalar());
          ????return autoId;
          ???}

          ???/// <summary>
          ???/// 根據當前alFieldItem數組中存儲的字段/值和條件表達式所指定的條件來更新數據庫中的記錄,返回所影響的行數。
          ???/// </summary>
          ???/// <param name="_tableName">要更新的數據表名稱。</param>
          ???/// <returns>返回此次操作所影響的數據行數。</returns>
          ???public int Update(string _tableName)
          ???{
          ????this.tableName=_tableName;
          ????this.fieldName=string.Empty;
          ????this.SqlCmd="update "+this.tableName+" set ";
          ????for(int i=0;i<this.alFieldItems.Count-1;i++)
          ????{
          ?????this.SqlCmd+=((DbKeyItem)alFieldItems[i]).fieldName;
          ?????this.SqlCmd+="=";

          ?????this.SqlCmd+="@para";
          ?????this.SqlCmd+=i.ToString();

          ?????this.SqlCmd+=",";
          ????}
          ????this.SqlCmd+=((DbKeyItem)alFieldItems[alFieldItems.Count-1]).fieldName;
          ????this.SqlCmd+="=";

          ????this.SqlCmd+="@para";
          ????this.SqlCmd+=(alFieldItems.Count-1).ToString();


          ????if(this.ConditionExpress!=string.Empty)
          ????{
          ?????this.SqlCmd=this.SqlCmd+" where "+this.ConditionExpress;
          ????}
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????int effectedLines=this.cmd.ExecuteNonQuery();
          ????return effectedLines;
          ???}

          ???/// <summary>
          ???/// 執行SqlCmd中的SQL語句,參數由AddSqlCmdParameters指定,與ConditionExpress無關。
          ???/// </summary>
          ???/// <returns>返回此次操作所影響的數據行數。</returns>
          ???public int ExecuteSqlNonQuery()
          ???{
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????return cmd.ExecuteNonQuery();
          ???}
          ???/// <summary>
          ???/// 獲取指定表,指定列,指定條件的第一個符合條件的值。
          ???/// </summary>
          ???/// <param name="_tableName">表名稱。</param>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <returns>獲取的值。如果為空則返回null。</returns>
          ???public object GetValue(string _tableName,string _fieldName)
          ???{
          ????this.tableName=_tableName;
          ????this.fieldName=_fieldName;
          ????this.SqlCmd="select "+this.fieldName+" from "+this.tableName;
          ????if(this.ConditionExpress!=string.Empty)
          ????{
          ?????this.SqlCmd=this.SqlCmd+" where "+this.ConditionExpress;
          ????}
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????return cmd.ExecuteScalar();
          ???}
          ???/// <summary>
          ???/// 根據當前指定的SqlCmd獲取DataTable。如果ConditionExpress不為空則會將其清空,所以條件表達式需要包含在SqlCmd中。
          ???/// </summary>
          ???/// <returns>返回查詢結果DataTable。</returns>
          ???public System.Data.DataTable GetDataTable()
          ???{
          ????System.Data.DataSet ds=this.GetDataSet();
          ????return ds.Tables[0];
          ???}
          ???/// <summary>
          ???/// 根據當前指定的SqlCmd獲取DataSet。如果ConditionExpress不為空則會將其清空,所以條件表達式需要包含在SqlCmd中。
          ???/// </summary>
          ???/// <returns>返回查詢結果DataSet。</returns>
          ???public System.Data.DataSet GetDataSet()
          ???{
          ????this.alConditionParameters.Clear();
          ????this.ConditionExpress=string.Empty;
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????System.Data.DataSet ds=new System.Data.DataSet();
          ????this.da.SelectCommand=this.cmd;
          ????this.da.Fill(ds);
          ????return ds;
          ???}
          ???/// <summary>
          ???/// 對指定表,指定字段執行加一計數,返回計數后的值。條件由ConditionExpress指定。
          ???/// </summary>
          ???/// <param name="_tableName">表名稱。</param>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <returns>返回計數后的值。</returns>
          ???public int Count(string _tableName,string _fieldName)
          ???{
          ????this.tableName=_tableName;
          ????this.fieldName=_fieldName;
          ????int count=Convert.ToInt32(this.GetValue(this.tableName,this.fieldName));
          ????count++;
          ????this.cmd.Parameters.Clear();
          ????this.cmd.CommandText=string.Empty;
          ????this.AddFieldItem(_fieldName,count);
          ????this.Update(this.tableName);
          ????return count;
          ???}

          ???/// <summary>
          ???/// 對指定表,指定字段執行減一計數,返回計數后的值。條件由ConditionExpress指定。
          ???/// </summary>
          ???/// <param name="_tableName">表名稱。</param>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <returns>返回計數后的值。</returns>
          ???public int Substract(string _tableName,string _fieldName)
          ???{
          ????this.tableName=_tableName;
          ????this.fieldName=_fieldName;
          ????int count=Convert.ToInt32(this.GetValue(this.tableName,this.fieldName));
          ????if(count>0)count--;
          ????this.cmd.Parameters.Clear();
          ????this.cmd.CommandText=string.Empty;
          ????this.AddFieldItem(_fieldName,count);
          ????this.Update(this.tableName);
          ????return count;
          ???}

          ???/// <summary>
          ???/// 根據ConditionExpress指定的條件在指定表中刪除記錄。返回刪除的記錄數。
          ???/// </summary>
          ???/// <param name="_tableName">指定的表名稱。</param>
          ???/// <returns>返回刪除的記錄數。</returns>
          ???public int Delete(string _tableName)
          ???{
          ????this.tableName=_tableName;
          ????this.SqlCmd="delete from "+this.tableName;
          ????if(this.ConditionExpress!=string.Empty)
          ????{
          ?????this.SqlCmd=this.SqlCmd+" where "+this.ConditionExpress;
          ????}
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????return cmd.ExecuteNonQuery();
          ???}
          ??????????? /// <summary>
          ??????????? /// 函數sendMsg需要 __Receive接受者 如果是系統則為 admin 否則為手機號碼
          ??????????? /// </summary>
          ??????????? /// <param name="_PHONE">手機號碼</param>
          ??????????? /// <param name="_KeyWorld">關鍵字</param>
          ??????????? /// <param name="_INFO">信息的基本內容</param>
          ??????????? /// <param name="_Receive">接受者</param>
          ??????????? /// <returns></returns>
          ??????????? public bool SendMsg(string _PHONE, string _KeyWorld, string _INFO, string _Receive)
          ??????????? {
          ??????????????? bool SendOk;
          ??????????????? if (_PHONE != null || _KeyWorld != null)
          ??????????????? {
          ??????????????????? this.Reset();
          ??????????????????? this.AddFieldItem("PHONE", _PHONE);
          ??????????????????? this.AddFieldItem("KeyWorld", _KeyWorld);
          ??????????????????? this.AddFieldItem("INFO", _INFO);
          ??????????????????? this.AddFieldItem("Receive", _Receive);
          ??????????????????? this.Insert("smsRawRecv").ToString();
          ??????????????????? SendOk = true;
          ??????????????? }
          ??????????????? else
          ??????????????? {
          ??????????????????? SendOk = false;
          ???????????????????
          ??????????????? }
          ??????????????? return SendOk;
          ??????????? }
          ??????????? /// <summary>
          ??????????? ///
          ??????????? /// </summary>
          ??????????? /// <param name="_PHONE"></param>
          ??????????? /// <param name="_KeyWorld"></param>
          ??????????? /// <param name="_INFO"></param>
          ??????????? /// <param name="_Receive"></param>
          ??????????? /// <returns></returns>
          ???????????? //public bool Received(string _PHONE, string _KeyWorld, string _INFO, string _Receive)
          ???????????? //{
          ???????????? //??? bool Received, SendOk;
          ???????????? //??? if (SendOk)
          ???????????? //??? {
          ???????????? //??????? if (_PHONE != null || _KeyWorld != null)
          ???????????? //??????? {
          ???????????? //??????????? this.Reset();
          ???????????? //??????????? this.AddFieldItem("PHONE", _PHONE);
          ???????????? //??????????? this.AddFieldItem("KeyWorld", _KeyWorld);
          ???????????? //??????????? this.AddFieldItem("INFO", _INFO);
          ???????????? //??????????? this.AddFieldItem("Receive", _Receive);
          ???????????? //??????????? this.Insert("smsSended").ToString();
          ???????????? //??????????? Received = true;
          ???????????? //??????? }
          ???????????? //??????? else
          ???????????? //??????? {
          ???????????? //??????????? Received = false;
          ???????????? //??????? }
          ???????????? //??? }
          ???????????? //??? else
          ???????????? //??? {
          ???????????? //??????? Received = false;
          ???????????? //??? }
          ???????????? //}
          ???/// <summary>
          ???/// 審核函數。將指定表,指定字段的值進行翻轉,如:1->0或0->1。條件由ConditionExpress指定。
          ???/// </summary>
          ???/// <param name="_tableName">表名稱。</param>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <returns>返回影響的行數。</returns>
          ???public int Audit(string _tableName,string _fieldName)
          ???{
          ????this.tableName=_tableName;
          ????this.fieldName=_fieldName;
          ????this.SqlCmd="update "+this.tableName+" set "+this.fieldName+"=1-"+this.fieldName;
          ????if(this.ConditionExpress!=string.Empty)
          ????{
          ?????this.SqlCmd=this.SqlCmd+" where "+this.ConditionExpress;
          ????}
          ????this.cmd.CommandText=this.SqlCmd;
          ????this.GenParameters();
          ????return cmd.ExecuteNonQuery();
          ???}

          ???/// <summary>
          ???/// 釋放資源
          ???/// </summary>
          ???public void Dispose()
          ???{
          ????conn.Close();
          ???}
          ??
          ??}

          ??/// <summary>
          ??/// 數據表中的字段屬性,包括字段名,字段值。
          ??/// 常用于保存要提交的數據。
          ??/// </summary>
          ??public class DbKeyItem
          ??{
          ???/// <summary>
          ???/// 構造函數。
          ???/// </summary>
          ???/// <param name="_fieldName">字段名稱。</param>
          ???/// <param name="_fieldValue">字段值。</param>
          ???public DbKeyItem(string _fieldName,object _fieldValue)
          ???{
          ????this.fieldName=_fieldName;
          ????this.fieldValue=_fieldValue.ToString();
          ???}
          ???/// <summary>
          ???/// 字段名稱。
          ???/// </summary>
          ???public string fieldName;
          ???/// <summary>
          ???/// 字段值。
          ???/// </summary>
          ???public string fieldValue;
          ??}
          ?}



          大盤預測 國富論
          posted on 2007-07-27 11:09 華夢行 閱讀(336) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 涟水县| 霍林郭勒市| 白银市| 扎鲁特旗| 铜山县| 页游| 得荣县| 论坛| 开封市| 镇安县| 铜山县| 梅州市| 博乐市| 托克托县| 钟祥市| 桂林市| 德格县| 黑水县| 若尔盖县| 镇雄县| 清涧县| 金沙县| 宜昌市| 德惠市| 普洱| 景泰县| 铜梁县| 集安市| 永寿县| 江西省| 洛浦县| 利津县| 石家庄市| 平塘县| 新昌县| 乐山市| 额济纳旗| 蓬安县| 江孜县| 盐池县| 五寨县|