`
kinglot
  • 浏览: 18023 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

用于快速开发的数据访问类1.1版

阅读更多
//--名称:SQL数据库访问基类
//--功能:一般ADO.NET原理,数据装箱坼箱及通用数据库控件绑定
//--背景:针对一些个人形式外包,要求快速开发的数据库中小型项目特写此类供页面直接调用
//--创建人:KingWei
//--创建日期:2010-02-20
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web;


namespace KingWei
{
    /// <summary>
    ///  数据库访问基类(for SQL)
    /// </summary>
    public class DBHelper:IDisposable
    { 
        #region 成员
        private SqlConnection Conn = null;
        private SqlTransaction tran = null;
        /// <summary>
        /// 事务标识
        /// </summary>
        public bool IsTran { get; set; }
        #endregion 
        
        #region 构造函数,SqlConnection对象初始化
        public DBHelper()
        {
            Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        }
        
        public DBHelper(string ConnectionKey)
        {
            Conn = new SqlConnection(ConfigurationManager.ConnectionStrings[ConnectionKey].ConnectionString);
        }
        #endregion

        #region 数据库事务
        /// <summary>
        /// 事务开始
        /// </summary>
        public void BeginTran()
        {
            OpenDB();
            tran = Conn.BeginTransaction(IsolationLevel.ReadCommitted);
            IsTran = true;
        }

        /// <summary>
        /// 回滚事务
        /// </summary>
        public void RollbackTran()
        {
            tran.Rollback();
            IsTran = false;
        }

        /// <summary>
        /// 提交事务
        /// </summary>
        public void CommitTran()
        {
            tran.Commit();
            IsTran = false;
        }
        #endregion

        #region SqlParameter对象创建

        private SqlParameter CreateSqlParameter(string paraName,DbType paraType,int paraSize, ParameterDirection paraDirection, object paraValue)
        {
            SqlParameter para = new SqlParameter();
            para.DbType = paraType;
            para.Direction = paraDirection;
            para.ParameterName = paraName;
            if (paraSize > 0)
            {
                para.Size = paraSize;
            }
            para.Value = paraValue;
            return para;
        }

        public SqlParameter CreateInSqlParameter(string paraName, DbType paraType, object paraValue)
        {
            return CreateSqlParameter(paraName, paraType, 0, ParameterDirection.Input, paraValue);
        }

        public SqlParameter CreateInSqlParameter(string paraName, DbType paraType,int paraSize, object paraValue)
        {
            return CreateSqlParameter(paraName, paraType, paraSize, ParameterDirection.Input, paraValue);
        }

        public SqlParameter CreateOutSqlParameter(string paraName, DbType paraType, object paraValue)
        {
            return CreateSqlParameter(paraName, paraType, 0, ParameterDirection.Output, paraValue);
        }

        public SqlParameter CreateOutSqlParameter(string paraName, DbType paraType, int paraSize, object paraValue)
        {
            return CreateSqlParameter(paraName, paraType, paraSize, ParameterDirection.Output, paraValue);
        }
        #endregion

        #region 常用ADO.NET方法
        /// <summary>
        /// OpenDB
        /// </summary>
        private void OpenDB()
        {
            if (Conn.State != ConnectionState.Open)
            {
                try
                {
                    Conn.Open();
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
            }
        }
        /// <summary>
        /// 初始化一个SqlCommand对象
        /// </summary>
        private void CreateCommand(SqlCommand cmd,CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
        {
            if (IsTran)
            {
                cmd.Transaction = tran;
            }
            else
            {
                OpenDB();
               
            }
            cmd.Connection = Conn;
            cmd.CommandType = cmdType;
            cmd.CommandText = cmdText;
            if (SqlParas !=null)
            {
                foreach (SqlParameter p in SqlParas)
                {
                    cmd.Parameters.Add(p);
                }
            }
        }

        /// <summary>
        /// 执行SQL返回一个DataSet
        /// </summary>
        public DataSet ExecuteQuery(CommandType cmdType,string cmdText,SqlParameter[] SqlParas)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                CreateCommand(cmd, cmdType, cmdText, SqlParas);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    return ds;
                }
            }
        }

        /// <summary>
        /// 执行SQL返回受影响的行数
        /// </summary>
        public int ExecuteNonQuery(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                CreateCommand(cmd, cmdType, cmdText, SqlParas);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 重载一:执行SQL返回第一行第一列的值
        /// </summary>
        public object ExecuteScalar(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                CreateCommand(cmd, cmdType, cmdText, SqlParas);
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 重载二:执行SQL返回第一行第一列的值,可传参取代返回值为NULL的情况
        /// </summary>
        public string ExecuteScalar(CommandType cmdType, string cmdText, SqlParameter[] SqlParas,string WhenNull)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                CreateCommand(cmd, cmdType, cmdText, SqlParas);
                object result = cmd.ExecuteScalar();
                return result == null?WhenNull:result.ToString();
            }
        }

        /// <summary>
        /// 执行一段SQL,返回一个DataReader对象
        /// </summary>
        public SqlDataReader ExecuteDataReader(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                CreateCommand(cmd, cmdType, cmdText, SqlParas);
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
        } 

        /// <summary>
        /// 常用分页方法
        /// </summary>
        /// <param name="PageSize">页面大小</param>
        /// <param name="RecordCount">记录总量</param>
        /// <param name="CurruntPageIndex">当前位置</param>
        /// <param name="TableName">表名/视图名</param>
        /// <param name="Condition">查询条件</param>
        /// <param name="IsAsc">是否升序排序</param>
        /// <param name="OrderBy">按哪些字段排序</param>
        /// <returns></returns>
        private SqlDataReader GetPageSql(string condition, Int16 pageSize, Int16 pageIndex, string tbNames, string sortNames, bool sortType)
        { 
            System.Text.StringBuilder PageSql = new System.Text.StringBuilder();
            string tbname, tbsortname, type;
            type = sortType ? "ASC" : "DESC";
            tbname = tbNames.ToUpper().IndexOf("SELECT") >= 0 ? "(" + tbNames + ")" + " as DBHelper" : tbNames + " as DBHelper";
            tbsortname = tbNames.ToUpper().IndexOf("SELECT") >= 0 ? "(" + tbNames + ") as DBHelperID" : tbNames + " as DBHelperID";
            if (pageIndex == 1)
            {
                PageSql.Append("select top " + pageSize.ToString() + " DBHelper.* from " + tbname + (!string.IsNullOrEmpty(condition) ? " where " + condition : string.Empty) + " order by " + sortNames + " " + type);
            }
            else
            {
                PageSql.AppendFormat("Select top {0}  DBHelper.* from ", pageSize);
                PageSql.AppendFormat("{0}", tbname);
                PageSql.AppendFormat(" where DBHelper.{0} not in(select top {1} DBHelperID.{0}",
                    sortNames.Substring(sortNames.LastIndexOf(",") + 1, sortNames.Length - sortNames.LastIndexOf(",") - 1),
                    pageSize * (pageIndex - 1));
                PageSql.AppendFormat(" from {0}", tbsortname);
                if (!string.IsNullOrEmpty(condition))
                {
                    PageSql.AppendFormat(" where {0} order by {1} {2}) and {0}", condition, sortNames, type);
                }
                else
                {
                    PageSql.AppendFormat(" order by {0} {1})", sortNames, type);
                }
                PageSql.AppendFormat(" order by {0} {1}", sortNames, type);
            }
            return ExecuteDataReader(CommandType.Text, PageSql.ToString(), null);
        }

        /// <summary>
        /// 手动关闭数据库连接对象
        /// </summary>
        public void CloseDB()
        {
            if (!object.Equals(Conn, null) && Conn.State != ConnectionState.Closed)
            {
                Conn.Close();
            }
        }
        #endregion

        #region 数据类型转换

        public string ToStr(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || string.IsNullOrEmpty(obj.ToString()))
                return "";
            else
                return obj.ToString();
        }

        public int ToInt(object obj)
        {
            if (object.Equals(obj,DBNull.Value)||object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return 0;
            else
                return Convert.ToInt32(obj);
        }

        public Int16 ToInt16(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return 0;
            else
                return Convert.ToInt16(obj);
        }

        public double ToDouble(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return 0;
            else
                return Convert.ToDouble(obj);
        }

        public Single ToSingle(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return 0;
            else
                return Convert.ToSingle(obj);
        }

        public bool ToBool(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null))
                return false;
            else
                return Convert.ToBoolean(obj);
        }

        public DateTime ToDateTime(object obj)
        {
            try
            {
                DateTime dt;
                DateTime.TryParse(Convert.ToString(obj), out dt);
                return dt;
            }
            catch
            {
                return DateTime.MinValue;
            }
        }

        public DateTime? ToNullDate(object obj)
        {
            if (object.Equals(obj, DBNull.Value))
                return null;
            else
                try
                {
                    DateTime dt;
                    DateTime.TryParse(Convert.ToString(obj), out dt);
                    return dt;
                }
                catch
                {
                    return null;
                }
        }

        public int? ToNullInt(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return null;
            else
                return Convert.ToInt32(obj);
        }

        public Int16? ToNullInt16(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return null;
            else
                return Convert.ToInt16(obj);
        }

        public double? ToNulldouble(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return null;
            else
                return Convert.ToDouble(obj);
        }

        public Single? ToNullSingle(object obj)
        {
            if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                return null;
            else
                return Convert.ToSingle(obj);
        }

        #endregion

        #region 常用控件数据绑定
        public enum SelType
        {
            ByValue,
            ByText
        }

        /// <summary>
        /// 列表型数据控件绑定
        /// </summary>
        public void ListBind(ListControl LstCtrl,object Lst)
        {
            LstCtrl.DataSource = Lst;
            LstCtrl.DataBind();
        }

        /// <summary>
        /// 绑定GridView
        /// </summary>
        public void GrdBind(GridView grdView, object Lst)
        {
            grdView.DataSource = Lst;
            grdView.DataBind();
        }
        /// <summary>
        /// 绑定GridView,并为指定的一列加上序号
        /// </summary>
        public void GrdBind(GridView grdView, object Lst, int InsertNo)
        {
            GrdBind(grdView, Lst);
            for (int i = 0; i < grdView.Rows.Count; i++)
            {
                grdView.Rows[i].Cells[InsertNo].Text = (i + 1).ToString();
            }
        }

        /// <summary>
        /// 绑定DropDownList
        /// </summary>
        public void DdlBind(DropDownList ddlList, object Lst)
        {
            ddlList.DataSource = Lst;
            ddlList.DataBind();
        }
        /// <summary>
        /// 绑定DropDownList,指定文本及值的绑定项
        /// </summary>
        public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField)
        {
            ddlList.DataSource = ddlList;
            ddlList.DataTextField = TextField;
            ddlList.DataValueField = ValueField;
            ddlList.DataBind();
        }
        /// <summary>
        /// 绑定DropDownList,指定文本及值的绑定项,插入一个名为defaultStr的默认项
        /// </summary>
        public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField, string defaultStr)
        {
            DdlBind(ddlList, Lst, TextField, ValueField);
            ddlList.Items.Insert(0, defaultStr);
        }
        /// <summary>
        /// 绑定DropDownList,指定文本及值的绑定项,使DropDownList选择默认的值
        /// </summary>
        public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField,SelType FindType, string FindStr)
        {
            DdlBind(ddlList, Lst, TextField, ValueField);
            int selectIndex = -1;
            for (int i = 0; i < ddlList.Items.Count; i++)
            {
                switch (FindType)
                {
                    case SelType.ByText:
                        if (ddlList.Items[i].Text == FindStr)
                        {
                            selectIndex= i;
                        }
                        break;
                    case SelType.ByValue:
                        if (ddlList.Items[i].Value == FindStr)
                        {
                            selectIndex = i;
                        }
                        break;
                }
                if (selectIndex > -1)
                {
                    ddlList.SelectedIndex = selectIndex;
                    break;
                }
            }
        }

        #endregion

        #region 常用客户端脚本
        /// <summary>
        /// 弹出提示框
        /// </summary>
        public  void Alert(Page page, string msg)
        {
            string js = @"alert('" + msg + "')";
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "Alert"))
                page.ClientScript.RegisterStartupScript(page.GetType(), "Alert", js, true);
        }

        /// <summary>
        /// 弹出提示框并跳转到指定页面
        /// </summary>
        public  void AlertAndRedirect(Page page, string msg, string ToURL)
        {
            string js = @"alert('{0}');window.location.replace('{1}');";
            js = string.Format(js, msg, ToURL);
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "AlertAndRedirect"))
                page.ClientScript.RegisterStartupScript(page.GetType(), "AlertAndRedirect", js, true);
        }

        /// <summary>
        /// 返回历史
        /// </summary>
        public  void GoHistory(Page page, int value)
        {
            string js = @"history.go('{0}')";
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "GoHistory"))
                page.ClientScript.RegisterStartupScript(page.GetType(), "GoHistory", string.Format(js, value), true);
        }

        /// <summary>
        /// 关闭并使父窗口根据URL刷新
        /// </summary>
        public  void RefreshParent(Page page, string url)
        {
            string js = @"window.openner.location.href='{0}'; window.close();";
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "RefreshParent"))
                page.ClientScript.RegisterStartupScript(page.GetType(), "RefreshParent", string.Format(js, url), true);
        }

        //// <summary> 
        /// 打开指定大小的新窗体 
        /// </summary> 
        /// <param name="url">地址</param> 
        /// <param name="width">宽</param> 
        /// <param name="heigth">高</param> 
        /// <param name="top">头位置</param> 
        /// <param name="left">左位置</param> 
        /// <param name="scoll">是否带滚动条</param>
        public  void OpenWebFormSize(string url, int width, int heigth, int top, int left, bool scoll, Page page)
        {

            string js = @"window.open('" + url + @"','','height=" + heigth + ",width=" + width + ",top=" + top + ",left=" + left + "," +
                         "location=no,menubar=no,resizable=no,scrollbars=" + (scoll ? "yes" : "no") + ",status=yes,titlebar=no,toolbar=no,directories=no');";
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "OpenWebFormSize"))
            {
                page.ClientScript.RegisterStartupScript(page.GetType(), "OpenWebFormSize", js, true);
                //HttpContext.Current.Server.Transfer
            }
        }

        public void OpenModalDialog(string ModalDialogURL, string parentwin, Page page)
        {
            string js = @"window.showModalDialog('{0}','{1}');";
            js = string.Format(js, ModalDialogURL, parentwin);
            //if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "OpenModalDialog"))
            //    page.ClientScript.RegisterStartupScript(page.GetType(), "OpenModalDialog", js, true);
            HttpContext.Current.Response.Write("<script>" + js + "</script>");
        }
        /// <summary>
        /// 转向指定路径
        /// </summary>
        public void TransferURL(Page page, string URL)
        {
            string js = @"window.location.href='{0}'";
            js = string.Format(js, URL);
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "TransferURL"))
            {
                page.ClientScript.RegisterStartupScript(page.GetType(), "TransferURL", js, true);
            }
        }

        /// <summary>
        /// 执行JS
        /// </summary>
        public void WriteJs(Page page, string js)
        {
            page.ClientScript.RegisterStartupScript(page.GetType(), "WriteJs", js, true);
        }

        /// <summary>
        /// 关闭窗口
        /// </summary>
        public void CloseWindow(Page page)
        {
            string js = @"window.close()";
            if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(), "CloseWindow"))
            {
                page.ClientScript.RegisterStartupScript(page.GetType(), "CloseWindow", js, true);
            }
        }
        #endregion

        #region IDisposable 成员

        public void Dispose()
        {
            if(Conn != null)
                Conn.Dispose();
            if (tran != null)
                tran.Dispose();
        }

        #endregion
    }
}

1.1版本新增常用脚本操作.

 

分享到:
评论

相关推荐

    Yii框架1.1版本

    文件"yii-1.1.2.r2086"可能是Yii 1.1.2的特定版本或修订版,它包含了该框架的所有源代码和资源文件,供开发者下载并用于项目开发。安装和使用Yii框架通常涉及到下载这个压缩包,解压后配置好环境,然后根据项目需求...

    商品表数据打包mxshop1.1M

    使用这个SQL脚本,开发人员或DBA可以在新的环境中快速地搭建与原始系统相同的数据结构,并导入相同的数据,以便于测试、备份或迁移。此外,通过分析这个脚本,我们还可以了解商品管理系统的数据模型设计,包括数据的...

    yii1.1版本资料整理

    Yii1.1框架是用PHP语言开发的一个高性能的Web应用开发框架,它的目标是促进快速开发并简化企业级的应用开发。Yii1.1作为一个成熟的框架,在2016年之后便停止更新,不过由于其优秀的性能和设计理念,对于仍在使用 Yii...

    Winform快速开发框架

    【Winform快速开发框架】是一种基于Windows Forms(Winform)技术的高效开发工具,它针对企业级应用提供了便捷的框架支持。这个框架的核心特点是利用基类的三层架构,旨在简化开发过程,提高代码复用性,同时保持...

    jdom 1.1 版本

    JDOM 1.1的官方文档详尽全面,包含了大量的示例代码和教程,帮助开发者快速上手。同时,活跃的社区提供了丰富的资源和问题解答,使得学习和使用JDOM变得更加容易。 总的来说,JDOM 1.1作为Java处理XML的首选库之一...

    37社区1.1版本源码.zip

    7. API接口:如果应用支持移动设备,可能还包括RESTful API的设计和实现,用于前后端分离,提供跨平台的数据交换。 8. 安全性:社区应用需防范SQL注入、XSS攻击等安全问题,源码中应有相应的防护措施。 9. 性能...

    OPCSTOPCDA服务器开发包1.1.rar

    这些组件是实现OPC DA服务器功能的基础,包括OPC数据访问接口的实现,以及与OPC客户端通信所需的各种功能。 总的来说,OPCSTOPCDA服务器开发包1.1提供了完整的框架和工具,让开发者能够创建自己的OPC DA服务器,...

    ADJUST1.1.zip

    标题中的"ADJUST1.1.zip"显然是一款与EEG(脑电图)处理相关的软件或工具包,可能是一个更新版本或插件,用于改善EEG数据的质量。EEG是神经科学领域常用的非侵入性技术,用于记录大脑的电活动。在分析EEG数据时,...

    jstl1.1.jar和standard1.1.jar-C++文档类资源

    这个库提供了对JSP 2.0表达式语言的支持,使得开发者可以在JSP页面中使用EL语法进行数据访问和操作。EL是一种轻量级的脚本语言,用于简化JSP中的数据绑定和表达式处理。 将`jstl1.1.jar`和`standard1.1.jar`一起...

    CodeEngine1.1(xml版本)

    CodeEngine1.1会自动生成这一层的代码,如ADO.NET或Entity Framework的数据访问类,使得数据操作更加便捷。 2. **业务逻辑层(BLL)**:位于中间层,负责处理业务规则和流程。这一层的代码通常包含业务对象和业务...

    activation-1.1.jar

    `activation-1.1.jar`库正是用于处理Java应用程序中的邮件激活和解析功能,它是JavaMail API的一个重要组成部分,对于进行邮件相关的开发工作至关重要。 JavaMail API是一个开源的Java库,它提供了与邮件服务器交互...

    axis1.1lib包

    "Axis1.1lib包"是针对Axis1.1版本的Web服务开发工具包,它在早期的Java Web服务开发中扮演了重要角色。Axis是一个开源项目,由Apache软件基金会维护,专门用于创建、部署和管理基于SOAP(简单对象访问协议)的Web...

    kotlin 1.1

    Kotlin的用途十分广泛,文档中提到它不仅可以用在服务器端开发,还非常适合用于Android开发和JavaScript环境。在服务器端,Kotlin支持与Java技术栈完全兼容,同时提供了富有表现力的语言特性,例如类型安全的构建器...

    C#实体类生成工具 v1.1

    在实际开发中,实体类通常会结合ORM(对象关系映射)框架如Entity Framework、NHibernate等使用,这些框架可以自动将数据库操作转化为对象操作,进一步简化了数据访问层的代码。C#实体类生成工具生成的代码可以无缝...

    SQL数据库访问类适合于C#的开发

    在这个结构中,数据访问类位于数据访问层,负责处理与数据库的所有交互,从而将数据管理与用户界面和业务逻辑分离,提高了代码的可维护性和可重用性。 描述中提到的“一个关于SQL的学生数据库访问的类”可能包含对...

    Asp.net MVC快速开发框架源码 mvc+Bootstrap

    2. **模型层**:包含业务实体类,用于数据处理和存储,可能还包括数据访问对象(DAO)或实体框架(Entity Framework)等ORM工具。 3. **控制器**:处理HTTP请求,调用服务或业务逻辑,并返回视图结果。它们是连接...

    1.1.net类库

    1. **Base Class Library (BCL)**:这是.NET框架的基础,提供了一组通用的类,涵盖了数据访问、文件操作、网络通信、字符串处理等多个领域。例如,System.IO命名空间中的类用于处理输入/输出操作,如FileStream、...

    net快速开发框架 EF MVC Bootstrap的通用后台管

    【描述】:“net快速开发框架 EF MVC Bootstrap的通用后台管理”是指利用.NET技术栈,结合Entity Framework(EF)进行数据访问,Model-View-Controller(MVC)架构设计模式以及Bootstrap前端框架,构建出的一种高效...

    Struts_1.1 JDBC驱动

    这样,业务逻辑与数据访问被有效地解耦,提高了代码的可维护性和可测试性。 使用Struts 1.1和JDBC驱动进行数据库操作时,还需要注意以下几点: 1. 数据库连接的关闭:在完成数据库操作后,应及时关闭Statement和...

    我行我素留言 v1.1 修改版

    《我行我素留言 v1.1 修改版》是一款基于互联网的互动交流工具,主要用于提供一个平台让访客能够在网站上留下他们的信息、意见或建议。这个修改版可能相对于原版进行了一些功能优化或者错误修复,以提升用户体验。在...

Global site tag (gtag.js) - Google Analytics