选择显示字体大小

sqlserver2000数据访问基类

using system;
using system.io;
using system.data;
using system.data.sqlclient;
using system.configuration;
using system.collections;

namespace sqlserverbase
{
    /// <summary>
    ///内部类:存储过程的返回值记录类
    /// </summary>
    public class sqlresult
    {       
        public bool succeed;            //存储过程是否执行成功.
        public hashtable outputvalues;    // 存储过程output值,放在(hashtable)表outputvalues里.           
        public datatable datatable;        //存储过程返回的结果集,放在(datatable)表datatable里.
        public dataset dataset;            //存储过程返回的结果集,放在dataset表中
        public string errormessage;        //访问数据库失败
        public int inflecntnum;
        public sqlresult()
        {
            succeed = false;
            outputvalues = new hashtable();
            datatable=new datatable();
            dataset=new dataset();
            errormessage = "";
        }
    }
    /// <summary>
    /// ====================***调用存储过程和sql的基类***============================
    /// abstract:该类不能被实例化,只能通过派生子类来使用它
    /// </summary>
    public abstract class spsql_base : idisposable
    {
        public spsql_base() : this("","")
        {
        }
        //重载
        public spsql_base(string sp_name,string sql_name)
        {
            this.procedurename = sp_name;
            this.sqlname = sql_name;
        }
        //私有成员变量
        private string sp_name;
        private string sql_name;
        private sqlconnection myconnection;
        private sqlcommand mycommand;
        private sqlparameter myparameter;//存储过程参数
       
        //公共属性
        public string procedurename//获取和设置存储过程
        {
            get
            {
                return this.sp_name;
            }
            set
            {
                this.sp_name = value;
            }
        }
        //公共属性
        public string sqlname//获取和设置存储过程
        {
            get
            {
                return this.sql_name;
            }
            set
            {
                this.sql_name = value;
            }
        }
        /// <summary>
        /// 调用存储过程
        /// </summary>
        /// <param name="parameters">参数集合</param>
        /// <returns></returns>
        public  sqlresult call_sp(params object[] parameters)
        {
            string strconn=configurationsettings.appsettings["connectionstring"];
            //存储过程的返回值记录类
            sqlresult result = new sqlresult();
            myconnection  = new sqlconnection(strconn);           
            mycommand = new sqlcommand(this.procedurename, myconnection);
            mycommand.commandtype = commandtype.storedprocedure;           
            sqldataadapter myadapter = new sqldataadapter(mycommand);   
            myconnection.open();
            //将参数添加到存储过程的参数集合
            getprocedureparameter(result,parameters);
            //开始事物
            using(sqltransaction trans = myconnection.begintransaction())
            {
                try
                {                   
                    if(trans!=null)
                    {
                        mycommand.transaction = trans;
                    }
                    //填充数据,将结果填充到sqlresult集中
                    myadapter.fill(result.dataset);
                    if(result.dataset.tables.count>0)
                        result.datatable=result.dataset.tables[0].copy();
                    //将输出参数的值添加到result的outputvalues
                    getoutputvalue(result);
                    //提交事物
                    trans.commit();
                }
                catch(exception e)
                {
                    result.errormessage = e.message;
                    //事物回滚
                    trans.rollback();
                }
                //如果捕捉了异常,但仍会执行包括在 finally 块中的输出语句
                finally
                {
                    myadapter.dispose();
                    mycommand.dispose();
                    myconnection.close();
                    myconnection.dispose();
                }
            }
            return result;
        }
        /// <summary>
        /// 将参数添加到存储过程的参数集合
        /// </summary>
        /// <param name="parameters"></param>
        private void getprocedureparameter(sqlresult result,params object[] parameters)
        {
            sqlcommand mycommand2 = new sqlcommand();
            mycommand2.connection = this.myconnection;
            mycommand2.commandtext = "select * from information_schema.parameters where specific_name='" +this.procedurename+ "' order by ordinal_position";
            sqldatareader reader = null;
            try
            {
                reader = mycommand2.executereader();
                int i = 0;
                while(reader.read())
                {
                    myparameter = new sqlparameter();
                    myparameter.parametername = reader["parameter_name"].tostring();
                    myparameter.direction = reader["parameter_mode"].tostring()=="in"?parameterdirection.input:parameterdirection.output;
                
                    switch(reader["data_type"].tostring())
                    {
                            //bigint
                        case "bigint":
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.toint64(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.bigint;
                            break;
                            //binary

                            //bit
                        case "bit" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.toboolean(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.bit;
                            break;
                            //char
                        case "char" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (string)parameters[i];
                            myparameter.size = convert.toint32(reader["character_maximum_length"]);
                            myparameter.sqldbtype = sqldbtype.char;
                            break;
                            //datetime
                        case "datetime" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.todatetime(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.datetime;
                            break;
                            //decimal
                        case "decimal" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (decimal)parameters[i];
                            myparameter.sqldbtype = sqldbtype.decimal;
                            myparameter.precision = (byte)reader["numeric_precision"];
                            myparameter.scale = byte.parse(reader["numeric_scale"].tostring());
                            break;
                            //float
                        case "float" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (float)parameters[i];
                            myparameter.sqldbtype = sqldbtype.float;
                            break;
                            //image
                        case "image" :
                            if(myparameter.direction == parameterdirection.input)
                            {
                                myparameter.value=(byte[])parameters[i];                           
                            }
                            myparameter.sqldbtype = sqldbtype.image;
                            break;
                            //int
                        case "int" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.toint32(parameters[i].tostring());
                            myparameter.sqldbtype = sqldbtype.int;
                            break;
                            //money
                        case "money":
                            if(myparameter.direction==parameterdirection.input)
                                myparameter.value=convert.todecimal(parameters[i]);
                            myparameter.sqldbtype=sqldbtype.money;
                            break;
                            //nchar
                        case "nchar" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (string)parameters[i];
                            myparameter.size = convert.toint32(reader["character_maximum_length"]);
                            myparameter.sqldbtype = sqldbtype.nchar;
                            break;
                            //ntext
                        case "ntext" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (string)parameters[i];
                            myparameter.sqldbtype = sqldbtype.ntext;
                            break;
                            //numeric
                        case "numeric" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (decimal)parameters[i];
                            myparameter.sqldbtype = sqldbtype.decimal;
                            myparameter.precision = (byte)reader["numeric_precision"];
                            myparameter.scale = byte.parse(reader["numeric_scale"].tostring());
                            break;
                            //nvarchar
                        case "nvarchar" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.tostring(parameters[i]);
                            myparameter.size = convert.toint32(reader["character_maximum_length"]);
                            myparameter.sqldbtype = sqldbtype.nvarchar;
                            break;
                            //real
                        case "real":
                            if(myparameter.direction==parameterdirection.input)
                                myparameter.value=convert.tosingle(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.real;
                            break;   
                            //smalldatetime
                        case "smalldatetime" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.todatetime(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.datetime;
                            break; 
                            //smallint
                        case "smallint" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.toint16(parameters[i].tostring());
                            myparameter.sqldbtype = sqldbtype.smallint;
                            break;
                            //smallmoney
                        case "smallmoney":
                            if(myparameter.direction==parameterdirection.input)
                                myparameter.value=convert.todecimal(parameters[i]);
                            myparameter.sqldbtype=sqldbtype.smallmoney;
                            break;
                            //sql_variant

                            //text
                        case "text" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (string)parameters[i];
                            myparameter.sqldbtype = sqldbtype.text;
                            break;
                            //timestamp

                            //tinyint
                        case "tinyint":
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = convert.tobyte(parameters[i]);
                            myparameter.sqldbtype = sqldbtype.tinyint;
                            break;
                            //uniqueidentifier

                            //varbinary
                        case "varbinary":
                            if(myparameter.direction==parameterdirection.input)
                                myparameter.value=(byte[])parameters[i];
                            myparameter.sqldbtype = sqldbtype.varbinary;
                            break;
                            //varchar
                        case "varchar" :
                            if(myparameter.direction == parameterdirection.input)
                                myparameter.value = (string)parameters[i];
                            myparameter.size = convert.toint32(reader["character_maximum_length"]);
                            myparameter.sqldbtype = sqldbtype.varchar;
                            break;
                        default :
                            break;
                    }
                    i++;
                    mycommand.parameters.add(myparameter);
                }
            }
            catch(exception e)
            {
                result.errormessage = e.message;
            }
            finally
            {
                if(reader!=null)
                {
                    reader.close();
                }
                mycommand2.dispose();
            }
        }
        /// <summary>
        /// 将输出的值添加到result的outputvalues
        /// </summary>
        /// <param name="result"></param>
        private void getoutputvalue(sqlresult result)
        {
            if(result.succeed==false)
            {
                result.succeed=true;
            }
            foreach(sqlparameter parameter in mycommand.parameters)
            {
                if(parameter.direction == parameterdirection.output)
                {
                    //hashtab表是一个键值对
                    result.outputvalues.add(parameter.parametername, parameter.value);
                }
            }
        }
        public void dispose()
        {
            dispose(true);
            gc.suppressfinalize(true);
        }
        protected virtual void dispose(bool disposing)
        {
            if (! disposing)
                return;
            if(myconnection != null)
            {
                myconnection.dispose();
            }
        }
        //=======end======

        //=======begin====
        /// <summary>
        /// 调用sql的基类
        /// </summary>
        /// <param name="parameters">参数集合</param>
        /// <returns></returns>
        public sqlresult call_sql()
        {
            string strconn=configurationsettings.appsettings["connectionstring"];
            //存储过程的返回值记录类
            sqlresult result = new sqlresult();
            myconnection = new sqlconnection(strconn);
            mycommand = new sqlcommand(this.sql_name, myconnection);
            mycommand.commandtype = commandtype.text;
            sqldataadapter myadapter = new sqldataadapter(mycommand);       
            myconnection.open();
            using(sqltransaction trans  = myconnection.begintransaction())
            {
                try
                {
                    if(trans!=null)
                    {
                        mycommand.transaction = trans;
                    }           
                    //填充数据,将结果填充到sqlresult集中
                    myadapter.fill(result.datatable);
                    result.succeed = true;
                    //提交事物
                    trans.commit();
                }
                catch(exception e)
                {
                    result.succeed = false;
                    result.errormessage = e.message;
                }
                //如果捕捉了异常,但仍会执行包括在 finally 块中的输出语句
                finally
                {                   
                    myadapter.dispose();
                    mycommand.dispose();
                    myconnection.close();
                    myconnection.dispose();               
                }
            }
            return result;
        }
        //=======end=========
    }
}

继承此类后直接调用,如下:db:northwind
public class datest : spsql_base
    {
        public datest()
        {}
        public sqlresult sqltest()
        {
            base.sqlname="select employeeid,lastname from dbo.employees";
            return base.call_sql();
        }
        public sqlresult sptest()
        {
            base.procedurename="custorderhist";
            return base.call_sp("alfki");
        }
    }配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appsettings>
    <add key="connectionstring" value="server=bim-7c67612053c;database=northwind;uid=sa;pwd=;" />
</appsettings>
</configuration>显示查询结果:
private void datashow_load(object sender, system.eventargs e)
        {
            datest da=new datest();
            if(da.sptest().succeed && da.sqltest().succeed)
            {
                this.datasp.datasource=da.sptest().datatable;
               
                this.datasql.datasource=da.sqltest().datatable;
            }
        }   



 

 

 

 

 

 

 

 

 

 

此类还有待完善,诸如存储过程参数为//binary、//sql_variant、//timestamp、//uniqueidentifier这些类型时还不能执行查询,其余bug请大家多多指正~~

感谢以前一起在二炮工作过的师兄们提供源代码,小弟只是做简单修改,谢谢各位师兄!

出处:shanvenleo blog


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons