欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

C# SqlServer操作辅助类(SqlServerHelper.cs)

程序员文章站 2022-05-10 22:41:51
...

开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。 因为Sqlserver数据库有多种登录方式,所以在构造函数中: #region [构造函数] /// summar

开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。

因为Sqlserver数据库有多种登录方式,所以在构造函数中:

  #region[构造函数]
        /// 
        /// 构造函数,初始化
        /// 
        /// 正确的数据库连接字符串
        /// 超时时间
        public SqlServerHelper(string ConStr, int TimeOut)
        {
            ConnectString = ConStr;
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = TimeOut;
        }
        /// 
        /// 构造函数,初始化
        /// 
        /// 正确的数据库连接字符串
        public SqlServerHelper(string ConStr)
        {
            ConnectString = ConStr;
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = 30;
        }
        /// 
        /// 构造函数,初始化
        /// 
        /// 数据库服务器名称或地址
        /// 访问的数据库
        /// 用户名
        /// 密码
        /// 超时时间
        public SqlServerHelper(string DataServer, string DataBase, string UserID, string Pwd,int TimeOut)
        {
            ConnectString = string.Format("Data Source={0};Initial Catalog={1};User ID={2};pwd={3}", DataServer, DataBase, UserID, Pwd);
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = TimeOut;
        }
        /// 
        /// 构造函数,初始化
        /// 
        /// 数据库服务器名称或地址
        /// 访问的数据库
        /// 用户名
        /// 密码
        public SqlServerHelper(string DataServer, string DataBase, string UserID, string Pwd)
        {
            ConnectString = string.Format("Data Source={0};Initial Catalog={1};User ID={2};pwd={3}", DataServer, DataBase, UserID, Pwd);
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = 30;          
        }

        /// 
        /// 构造函数,初始化
        /// 
        /// 访问的数据库
        /// 是否为本地数据库?若False,则抛出异常
        /// 超时时间
        public SqlServerHelper(string database, bool isLocal,int TimeOut)
        {
            if (!isLocal)
            {
                throw (new Exception("不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。"));
            }
            connectstring = string.Format("Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True", database);
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = TimeOut;
        }
        /// 
        /// 构造函数,初始化
        /// 
        /// 访问的数据库
        /// 是否为本地数据库?若False,则抛出异常
        public SqlServerHelper(string database, bool isLocal)
        {
              if (!isLocal)
            {
                throw (new Exception("不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。"));
            }
            connectstring = string.Format("Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True", database);
            connect = new SqlConnection(ConnectString);
            CommandTimeOut = 30;
        }
        #endregion

这样,可以方便地构造出自己的连接字符串。

同时这里用到几个比较有用的有关数据库服务器及数据库结构的函数。比如查询局域网中所有数据库实例,获取目标实例所有数据库,获取指定数据库的所有表,获取指定表所有行:

C# SqlServer操作辅助类(SqlServerHelper.cs)C# SqlServer操作辅助类(SqlServerHelper.cs)View Code

 #region 供使用API方式时使用
        [DllImport("odbc32.dll")]
        private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);
        [DllImport("odbc32.dll")]
        private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);
        [DllImport("odbc32.dll")]
        private static extern short SQLFreeHandle(short hType, IntPtr handle);
        [DllImport("odbc32.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi)]
        private static extern short SQLBrowseConnect(IntPtr hconn, System.Text.StringBuilder inString,
            short inStringLength, System.Text.StringBuilder outString, short outStringLength,
            out short outLengthNeeded);

        private const short SQL_HANDLE_ENV = 1;
        private const short SQL_HANDLE_DBC = 2;
        private const int SQL_ATTR_ODBC_VERSION = 200;
        private const int SQL_OV_ODBC3 = 3;
        private const short SQL_SUCCESS = 0;
        private const short SQL_NEED_DATA = 99;
        private const short DEFAULT_RESULT_SIZE = 1024;

        private const string SQL_DRIVER_STR = "DRIVER=SQL SERVER";
        #endregion
        /// 
        /// 获取网内的数据库服务器名称(API方式)
        /// 
        /// 服务器名称数组
        public static string[] GetServers()
        {
            string list = string.Empty;
            IntPtr henv = IntPtr.Zero;
            IntPtr hconn = IntPtr.Zero;
            System.Text.StringBuilder inString = new System.Text.StringBuilder(SQL_DRIVER_STR);
            System.Text.StringBuilder outString = new System.Text.StringBuilder(DEFAULT_RESULT_SIZE);
            short inStringLength = (short)inString.Length;
            short lenNeeded = 0;
            try
            {
                if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))
                {
                    if (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, 0))
                    {
                        if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))
                        {

                            if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,
                                 DEFAULT_RESULT_SIZE, out lenNeeded))
                            {
                                if (DEFAULT_RESULT_SIZE  lenNeeded)
                                {
                                    outString.Capacity