时间:2021-07-01 10:21:17 帮助过:39人阅读
开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。 因为Sqlserver数据库有多种登录方式,所以在构造函数中: #region [构造函数] /// summar
开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。
因为Sqlserver数据库有多种登录方式,所以在构造函数中:
- <span>#region</span>[构造函数]
- <span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="ConStr"></span><span>正确的数据库连接字符串</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> ConStr, <span>int</span><span> TimeOut)
- {
- ConnectString </span>=<span> ConStr;
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="ConStr"></span><span>正确的数据库连接字符串</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span><span> ConStr)
- {
- ConnectString </span>=<span> ConStr;
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="DataServer"></span><span>数据库服务器名称或地址</span><span></span>
- <span>///</span> <span><param name="DataBase"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="UserID"></span><span>用户名</span><span></span>
- <span>///</span> <span><param name="Pwd"></span><span>密码</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> DataServer, <span>string</span> DataBase, <span>string</span> UserID, <span>string</span> Pwd,<span>int</span><span> TimeOut)
- {
- ConnectString </span>= <span>string</span>.Format(<span>"</span><span>Data Source={0};Initial Catalog={1};User ID={2};pwd={3}</span><span>"</span><span>, DataServer, DataBase, UserID, Pwd);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="DataServer"></span><span>数据库服务器名称或地址</span><span></span>
- <span>///</span> <span><param name="DataBase"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="UserID"></span><span>用户名</span><span></span>
- <span>///</span> <span><param name="Pwd"></span><span>密码</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> DataServer, <span>string</span> DataBase, <span>string</span> UserID, <span>string</span><span> Pwd)
- {
- ConnectString </span>= <span>string</span>.Format(<span>"</span><span>Data Source={0};Initial Catalog={1};User ID={2};pwd={3}</span><span>"</span><span>, DataServer, DataBase, UserID, Pwd);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="database"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="isLocal"></span><span>是否为本地数据库?若False,则抛出异常</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> database, <span>bool</span> isLocal,<span>int</span><span> TimeOut)
- {
- </span><span>if</span> (!<span>isLocal)
- {
- </span><span>throw</span> (<span>new</span> Exception(<span>"</span><span>不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。</span><span>"</span><span>));
- }
- connectstring </span>= <span>string</span>.Format(<span>"</span><span>Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True</span><span>"</span><span>, database);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="database"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="isLocal"></span><span>是否为本地数据库?若False,则抛出异常</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> database, <span>bool</span><span> isLocal)
- {
- </span><span>if</span> (!<span>isLocal)
- {
- </span><span>throw</span> (<span>new</span> Exception(<span>"</span><span>不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。</span><span>"</span><span>));
- }
- connectstring </span>= <span>string</span>.Format(<span>"</span><span>Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True</span><span>"</span><span>, database);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>#endregion</span>
这样,可以方便地构造出自己的连接字符串。
同时这里用到几个比较有用的有关数据库服务器及数据库结构的函数。比如查询局域网中所有数据库实例,获取目标实例所有数据库,获取指定数据库的所有表,获取指定表所有行:
View Code
- <span>#region</span> 供使用API方式时使用<span>
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLAllocHandle(<span>short</span> hType, IntPtr inputHandle, <span>out</span><span> IntPtr outputHandle);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLSetEnvAttr(IntPtr henv, <span>int</span> attribute, IntPtr valuePtr, <span>int</span><span> strLength);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLFreeHandle(<span>short</span><span> hType, IntPtr handle);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span>, CharSet =<span> System.Runtime.InteropServices.CharSet.Ansi)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span><span> SQLBrowseConnect(IntPtr hconn, System.Text.StringBuilder inString,
- </span><span>short</span> inStringLength, System.Text.StringBuilder outString, <span>short</span><span> outStringLength,
- </span><span>out</span> <span>short</span><span> outLengthNeeded);
- </span><span>private</span> <span>const</span> <span>short</span> SQL_HANDLE_ENV = <span>1</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_HANDLE_DBC = <span>2</span><span>;
- </span><span>private</span> <span>const</span> <span>int</span> SQL_ATTR_ODBC_VERSION = <span>200</span><span>;
- </span><span>private</span> <span>const</span> <span>int</span> SQL_OV_ODBC3 = <span>3</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_SUCCESS = <span>0</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_NEED_DATA = <span>99</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> DEFAULT_RESULT_SIZE = <span>1024</span><span>;
- </span><span>private</span> <span>const</span> <span>string</span> SQL_DRIVER_STR = <span>"</span><span>DRIVER=SQL SERVER</span><span>"</span><span>;
- </span><span>#endregion</span>
- <span>///</span> <span><summary>
- <span>///</span><span> 获取网内的数据库服务器名称(API方式)
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>服务器名称数组</span><span></span>
- <span>public</span> <span>static</span> <span>string</span><span>[] GetServers()
- {
- </span><span>string</span> list = <span>string</span><span>.Empty;
- IntPtr henv </span>=<span> IntPtr.Zero;
- IntPtr hconn </span>=<span> IntPtr.Zero;
- System.Text.StringBuilder inString </span>= <span>new</span><span> System.Text.StringBuilder(SQL_DRIVER_STR);
- System.Text.StringBuilder outString </span>= <span>new</span><span> System.Text.StringBuilder(DEFAULT_RESULT_SIZE);
- </span><span>short</span> inStringLength = (<span>short</span><span>)inString.Length;
- </span><span>short</span> lenNeeded = <span>0</span><span>;
- </span><span>try</span><span>
- {
- </span><span>if</span> (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, <span>out</span><span> henv))
- {
- </span><span>if</span> (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, <span>0</span><span>))
- {
- </span><span>if</span> (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, <span>out</span><span> hconn))
- {
- </span><span>if</span> (SQL_NEED_DATA ==<span> SQLBrowseConnect(hconn, inString, inStringLength, outString,
- DEFAULT_RESULT_SIZE, </span><span>out</span><span> lenNeeded))
- {
- </span><span>if</span> (DEFAULT_RESULT_SIZE <<span> lenNeeded)
- {
- outString.Capacity </span>=<span> lenNeeded;
- </span><span>if</span> (SQL_NEED_DATA !=<span> SQLBrowseConnect(hconn, inString, inStringLength, outString,
- lenNeeded, </span><span>out</span><span> lenNeeded))
- {
- </span><span>throw</span> <span>new</span> ApplicationException(<span>"</span><span>Unabled to aquire SQL Servers from ODBC driver.</span><span>"</span><span>);
- }
- }
- list </span>=<span> outString.ToString();
- </span><span>int</span> start = list.IndexOf(<span>"</span><span>{</span><span>"</span>) + <span>1</span><span>;
- </span><span>int</span> len = list.IndexOf(<span>"</span><span>}</span><span>"</span>) -<span> start;
- </span><span>if</span> ((start > <span>0</span>) && (len > <span>0</span><span>))
- {
- list </span>=<span> list.Substring(start, len);
- }
- </span><span>else</span><span>
- {
- list </span>= <span>string</span><span>.Empty;
- }
- }
- }
- }
- }
- }
- </span><span>catch</span><span>
- {
- list </span>= <span>string</span><span>.Empty;
- }
- </span><span>finally</span><span>
- {
- </span><span>if</span> (hconn !=<span> IntPtr.Zero)
- {
- SQLFreeHandle(SQL_HANDLE_DBC, hconn);
- }
- </span><span>if</span> (henv !=<span> IntPtr.Zero)
- {
- SQLFreeHandle(SQL_HANDLE_ENV, hconn);
- }
- }
- </span><span>string</span>[] array = <span>null</span><span>;
- </span><span>if</span> (list.Length > <span>0</span><span>)
- {
- array </span>= list.Split(<span>'</span><span>,</span><span>'</span><span>);
- }
- </span><span>return</span><span> array;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取网内的数据库服务器名称(qlClientFactory方式)
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>服务器名称数组</span><span></span>
- <span>public</span> <span>static</span> <span>string</span><span>[] GetServersBySqlClientFactory()
- {
- DataTable dataSources </span>=<span> SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
- DataColumn column2 </span>= dataSources.Columns[<span>"</span><span>ServerName</span><span>"</span><span>];
- DataColumn column </span>= dataSources.Columns[<span>"</span><span>InstanceName</span><span>"</span><span>];
- DataRowCollection rows </span>=<span> dataSources.Rows;
- </span><span>string</span>[] array = <span>new</span> <span>string</span><span>[rows.Count];
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < array.Length; i++<span>)
- {
- </span><span>string</span> str2 = rows[i][column2] <span>as</span> <span>string</span><span>;
- </span><span>string</span> str = rows[i][column] <span>as</span> <span>string</span><span>;
- </span><span>if</span> (((str == <span>null</span>) || (str.Length == <span>0</span>)) || (<span>"</span><span>MSSQLSERVER</span><span>"</span> ==<span> str))
- {
- array[i] </span>=<span> str2;
- }
- </span><span>else</span><span>
- {
- array[i] </span>= str2 + <span>@"</span><span>\</span><span>"</span> +<span> str;
- }
- }
- Array.Sort</span><<span>string</span>><span>(array);
- </span><span>return</span><span> array;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 根据不带数据库的连接字符串,遍历查找出所有数据库实例
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>指定服务器的所有数据库</span><span></span>
- <span>public</span> <span>string</span><span>[] GetDataBases()
- {
- List</span><<span>string</span>> list = <span>new</span> List<<span>string</span>><span>();
- SqlConnection sqlConnection </span>= <span>new</span><span> SqlConnection(ConnectString);
- </span><span>string</span><span>[] result;
- </span><span>try</span><span>
- {
- sqlConnection.Open();
- SqlCommand sqlCommand </span>= <span>new</span> SqlCommand(<span>"</span><span>select name AS 数据库 from master..sysdatabases</span><span>"</span><span>, sqlConnection);
- SqlDataReader sqlDataReader </span>=<span> sqlCommand.ExecuteReader();
- </span><span>while</span><span> (sqlDataReader.Read())
- {
- list.Add(sqlDataReader.GetString(</span><span>0</span><span>));
- }
- sqlDataReader.Close();
- </span><span>string</span>[] array = <span>new</span> <span>string</span><span>[]
- {
- </span><span>"</span><span>master</span><span>"</span><span>,
- </span><span>"</span><span>tempdb</span><span>"</span><span>,
- </span><span>"</span><span>model</span><span>"</span><span>,
- </span><span>"</span><span>msdb</span><span>"</span><span>
- };
- </span><span>string</span>[] array2 =<span> array;
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < array2.Length; i++<span>)
- {
- </span><span>string</span> item =<span> array2[i];
- </span><span>try</span><span>
- {
- list.Remove(item);
- }
- </span><span>catch</span><span>
- {
- }
- }
- result </span>=<span> list.ToArray();
- }
- </span><span>catch</span><span>
- {
- result </span>=<span> list.ToArray();
- }
- </span><span>finally</span><span>
- {
- sqlConnection.Close();
- }
- </span><span>return</span><span> result;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取SqlServer指定数据库的所有表
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>表集合,出错则产生异常</span><span></span>
- <span>public</span> <span>string</span><span>[] GetTables()
- {
- </span><span>string</span> sql = <span>"</span><span>select object_name (id) from sysobjects where xtype = 'u' and objectproperty (id,'IsMSShipped') = 0</span><span>"</span><span>;
- DataTable dt </span>=<span> ReturnDataTable(sql);
- List</span><<span>string</span>> Ls = <span>new</span> List<<span>string</span>><span>();
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < dt.Rows.Count; i++<span>)
- {
- Ls.Add(dt.Rows[i][</span><span>0</span><span>].ToString());
- }
- </span><span>return</span><span> Ls.ToArray();
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取指定表的所有列
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="TableName"></span><span>表名</span><span></span>
- <span>///</span> <span><returns></returns></span><span>列集合,出错则产生异常</span><span></span>
- <span>public</span> <span>string</span>[] GetColumns(<span>string</span><span> TableName)
- {
- </span><span>string</span> sql = <span>string</span>.Format(<span>"</span><span>select name from syscolumns where id=object_id('{0}')</span><span>"</span><span>,TableName);
- </span><span>try</span><span>
- {
- List</span><<span>string</span>> Ls = <span>new</span> List<<span>string</span>><span>();
- DataTable dt </span>=<span> ReturnDataTable(sql);
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < dt.Rows.Count; i++<span>)
- {
- Ls.Add(dt.Rows[i][</span><span>0</span><span>].ToString());
- }
- </span><span>return</span><span> Ls.ToArray();
- }
- </span><span>catch</span><span>
- {
- </span><span>throw</span><span>;
- }
- }</span>
接下来就是许多比较常用的增删改查的操作了。就不分开写了。
为了查看方便,贴出自己所有代码:
View Code
- <span>using</span><span> System;
- </span><span>using</span><span> System.Collections.Generic;
- </span><span>using</span><span> System.Data.SqlClient;
- </span><span>using</span><span> System.Data;
- </span><span>using</span><span> System.Collections;
- </span><span>using</span><span> System.Runtime.InteropServices;
- </span><span>namespace</span><span> MyTool.DataBase
- {
- </span><span>///</span> <span><summary>
- <span>///</span><span> SQL Server 数据库的操作类库。代码原创。
- </span><span>///</span> <span></span></summary></span>
- <span>public</span> <span>class</span><span> SqlServerHelper
- {
- </span><span>#region</span>[字段]
- <span>private</span> <span>string</span> connectstring = <span>"</span><span>Data Source=127.0.0.1;Initial Catalog=AdventureWorksDW;Integrated Security=True</span><span>"</span><span>;
- SqlConnection connect </span>= <span>null</span><span>;
- SqlCommand command </span>= <span>null</span><span>;
- </span><span>private</span> <span>int</span> CommandTimeOut = <span>30</span><span>;
- </span><span>#endregion</span>
- <span>#region</span>[属性]
- <span>///</span> <span><summary>
- <span>///</span><span> 数据库连接字符串
- </span><span>///</span> <span></span></summary></span>
- <span>public</span> <span>string</span><span> ConnectString
- {
- </span><span>get</span> { <span>return</span><span> connectstring; }
- </span><span>set</span> { connectstring =<span> value; }
- }
- </span><span>#endregion</span>
- <span>#region</span>[构造函数]
- <span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="ConStr"></span><span>正确的数据库连接字符串</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> ConStr, <span>int</span><span> TimeOut)
- {
- ConnectString </span>=<span> ConStr;
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="ConStr"></span><span>正确的数据库连接字符串</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span><span> ConStr)
- {
- ConnectString </span>=<span> ConStr;
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="DataServer"></span><span>数据库服务器名称或地址</span><span></span>
- <span>///</span> <span><param name="DataBase"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="UserID"></span><span>用户名</span><span></span>
- <span>///</span> <span><param name="Pwd"></span><span>密码</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> DataServer, <span>string</span> DataBase, <span>string</span> UserID, <span>string</span> Pwd,<span>int</span><span> TimeOut)
- {
- ConnectString </span>= <span>string</span>.Format(<span>"</span><span>Data Source={0};Initial Catalog={1};User ID={2};pwd={3}</span><span>"</span><span>, DataServer, DataBase, UserID, Pwd);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="DataServer"></span><span>数据库服务器名称或地址</span><span></span>
- <span>///</span> <span><param name="DataBase"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="UserID"></span><span>用户名</span><span></span>
- <span>///</span> <span><param name="Pwd"></span><span>密码</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> DataServer, <span>string</span> DataBase, <span>string</span> UserID, <span>string</span><span> Pwd)
- {
- ConnectString </span>= <span>string</span>.Format(<span>"</span><span>Data Source={0};Initial Catalog={1};User ID={2};pwd={3}</span><span>"</span><span>, DataServer, DataBase, UserID, Pwd);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="database"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="isLocal"></span><span>是否为本地数据库?若False,则抛出异常</span><span></span>
- <span>///</span> <span><param name="TimeOut"></span><span>超时时间</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> database, <span>bool</span> isLocal,<span>int</span><span> TimeOut)
- {
- </span><span>if</span> (!<span>isLocal)
- {
- </span><span>throw</span> (<span>new</span> Exception(<span>"</span><span>不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。</span><span>"</span><span>));
- }
- connectstring </span>= <span>string</span>.Format(<span>"</span><span>Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True</span><span>"</span><span>, database);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>=<span> TimeOut;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 构造函数,初始化
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="database"></span><span>访问的数据库</span><span></span>
- <span>///</span> <span><param name="isLocal"></span><span>是否为本地数据库?若False,则抛出异常</span><span></span>
- <span>public</span> SqlServerHelper(<span>string</span> database, <span>bool</span><span> isLocal)
- {
- </span><span>if</span> (!<span>isLocal)
- {
- </span><span>throw</span> (<span>new</span> Exception(<span>"</span><span>不在本地而是用了本地数据库访问方式,导致异常,请修改isLocal的值为True。</span><span>"</span><span>));
- }
- connectstring </span>= <span>string</span>.Format(<span>"</span><span>Data Source=127.0.0.1;Initial Catalog={0};Integrated Security=True</span><span>"</span><span>, database);
- connect </span>= <span>new</span><span> SqlConnection(ConnectString);
- CommandTimeOut </span>= <span>30</span><span>;
- }
- </span><span>#endregion</span>
- <span>#region</span>[私有函数]
- <span>private</span> <span>void</span><span> Open()
- {
- </span><span>try</span><span>
- {
- </span><span>if</span> (connect.State !=<span> System.Data.ConnectionState.Open)
- {
- connect.Open();
- }
- }
- </span><span>catch</span><span> (Exception ex)
- {
- </span><span>throw</span> (<span>new</span><span> Exception(ex.Message));
- }
- }
- </span><span>private</span> <span>void</span><span> Close()
- {
- </span><span>try</span><span>
- {
- </span><span>if</span> (connect.State !=<span> System.Data.ConnectionState.Closed)
- {
- connect.Close();
- }
- }
- </span><span>catch</span><span> (Exception ex)
- {
- </span><span>throw</span> (<span>new</span><span> Exception(ex.Message));
- }
- }
- </span><span>#endregion</span>
- <span>///</span> <span><summary>
- <span>///</span><span> 测试是否能够连通
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>布尔值</span><span></span>
- <span>public</span> <span>bool</span><span> ConnectTest()
- {
- </span><span>try</span><span>
- {
- connect.Open();
- }
- </span><span>catch</span><span>
- {
- connect.Close();
- </span><span>return</span> <span>false</span><span>;
- }
- </span><span>return</span> <span>true</span><span>;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 执行无返回的Sql语句,如插入,删除,更新
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="sqlstr"></span><span>SQL语句</span><span></span>
- <span>///</span> <span><returns></returns></span><span>受影响的条数</span><span></span>
- <span>public</span> <span>int</span> ExecuteNonQuery(<span>string</span><span> sqlstr)
- {
- </span><span>try</span><span>
- {
- Open();
- command </span>= <span>new</span><span> SqlCommand(sqlstr, connect);
- </span><span>int</span> num =<span> command.ExecuteNonQuery();
- command.Parameters.Clear();
- Close();
- </span><span>return</span><span> num;
- }
- </span><span>catch</span><span>
- {
- </span><span>throw</span><span>;
- }
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 执行查询语句,返回DataSet
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="sqlstr"></span><span>Sql</span><span></span>
- <span>///</span> <span><returns></returns></span><span>DataSet数据集</span><span></span>
- <span>public</span> DataSet ReturnDataSet(<span>string</span><span> sqlstr)
- {
- DataSet ds </span>= <span>new</span><span> DataSet();
- </span><span>try</span><span>
- {
- Open();
- SqlDataAdapter adapter </span>= <span>new</span><span> SqlDataAdapter(sqlstr, connect);
- adapter.Fill(ds, </span><span>"</span><span>Obj</span><span>"</span><span>);
- }
- </span><span>catch</span><span> (Exception)
- {
- </span><span>throw</span><span>;
- }
- </span><span>return</span><span> ds;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 执行查询语句,返回DataTable
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="sqlstr"></span><span>Sqk</span><span></span>
- <span>///</span> <span><returns></returns></span><span>DataTable数据表</span><span></span>
- <span>public</span> DataTable ReturnDataTable(<span>string</span><span> sqlstr)
- {
- </span><span>return</span> ReturnDataSet(sqlstr).Tables[<span>0</span><span>];
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 执行查询语句,返回DataReader
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="sqlstr"></span><span>Sql</span><span></span>
- <span>///</span> <span><returns></returns></span><span>DataReader</span><span></span>
- <span>public</span> SqlDataReader ReturnDataReader(<span>string</span><span> sqlstr)
- {
- </span><span>try</span><span>
- {
- Open();
- command </span>= <span>new</span><span> SqlCommand(sqlstr, connect);
- SqlDataReader myReader </span>=<span> command.ExecuteReader();
- command.Parameters.Clear();
- Close();
- </span><span>return</span><span> myReader;
- }
- </span><span>catch</span><span> (System.Data.SqlClient.SqlException e)
- {
- </span><span>throw</span> <span>new</span><span> Exception(e.Message);
- }
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 执行事务
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="SQLStringList"></span>
- <span>public</span> <span>void</span><span> ExecuteSqlTran(ArrayList SQLStringList)
- {
- Open();
- command </span>= <span>new</span><span> SqlCommand();
- command.Connection </span>=<span> connect;
- SqlTransaction tx </span>=<span> connect.BeginTransaction();
- command.Transaction </span>=<span> tx;
- </span><span>try</span><span>
- {
- </span><span>for</span> (<span>int</span> n = <span>0</span>; n < SQLStringList.Count; n++<span>)
- {
- </span><span>string</span> strsql =<span> SQLStringList[n].ToString();
- </span><span>if</span> (strsql.Trim().Length > <span>1</span><span>)
- {
- command.CommandText </span>=<span> strsql;
- command.ExecuteNonQuery();
- }
- }
- tx.Commit();
- }
- </span><span>catch</span><span> (Exception)
- {
- tx.Rollback();
- </span><span>throw</span><span>;
- }
- }
- </span><span>#region</span> 供使用API方式时使用<span>
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLAllocHandle(<span>short</span> hType, IntPtr inputHandle, <span>out</span><span> IntPtr outputHandle);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLSetEnvAttr(IntPtr henv, <span>int</span> attribute, IntPtr valuePtr, <span>int</span><span> strLength);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span><span>)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span> SQLFreeHandle(<span>short</span><span> hType, IntPtr handle);
- [DllImport(</span><span>"</span><span>odbc32.dll</span><span>"</span>, CharSet =<span> System.Runtime.InteropServices.CharSet.Ansi)]
- </span><span>private</span> <span>static</span> <span>extern</span> <span>short</span><span> SQLBrowseConnect(IntPtr hconn, System.Text.StringBuilder inString,
- </span><span>short</span> inStringLength, System.Text.StringBuilder outString, <span>short</span><span> outStringLength,
- </span><span>out</span> <span>short</span><span> outLengthNeeded);
- </span><span>private</span> <span>const</span> <span>short</span> SQL_HANDLE_ENV = <span>1</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_HANDLE_DBC = <span>2</span><span>;
- </span><span>private</span> <span>const</span> <span>int</span> SQL_ATTR_ODBC_VERSION = <span>200</span><span>;
- </span><span>private</span> <span>const</span> <span>int</span> SQL_OV_ODBC3 = <span>3</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_SUCCESS = <span>0</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> SQL_NEED_DATA = <span>99</span><span>;
- </span><span>private</span> <span>const</span> <span>short</span> DEFAULT_RESULT_SIZE = <span>1024</span><span>;
- </span><span>private</span> <span>const</span> <span>string</span> SQL_DRIVER_STR = <span>"</span><span>DRIVER=SQL SERVER</span><span>"</span><span>;
- </span><span>#endregion</span>
- <span>///</span> <span><summary>
- <span>///</span><span> 获取网内的数据库服务器名称(API方式)
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>服务器名称数组</span><span></span>
- <span>public</span> <span>static</span> <span>string</span><span>[] GetServers()
- {
- </span><span>string</span> list = <span>string</span><span>.Empty;
- IntPtr henv </span>=<span> IntPtr.Zero;
- IntPtr hconn </span>=<span> IntPtr.Zero;
- System.Text.StringBuilder inString </span>= <span>new</span><span> System.Text.StringBuilder(SQL_DRIVER_STR);
- System.Text.StringBuilder outString </span>= <span>new</span><span> System.Text.StringBuilder(DEFAULT_RESULT_SIZE);
- </span><span>short</span> inStringLength = (<span>short</span><span>)inString.Length;
- </span><span>short</span> lenNeeded = <span>0</span><span>;
- </span><span>try</span><span>
- {
- </span><span>if</span> (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, <span>out</span><span> henv))
- {
- </span><span>if</span> (SQL_SUCCESS == SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (IntPtr)SQL_OV_ODBC3, <span>0</span><span>))
- {
- </span><span>if</span> (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, <span>out</span><span> hconn))
- {
- </span><span>if</span> (SQL_NEED_DATA ==<span> SQLBrowseConnect(hconn, inString, inStringLength, outString,
- DEFAULT_RESULT_SIZE, </span><span>out</span><span> lenNeeded))
- {
- </span><span>if</span> (DEFAULT_RESULT_SIZE <<span> lenNeeded)
- {
- outString.Capacity </span>=<span> lenNeeded;
- </span><span>if</span> (SQL_NEED_DATA !=<span> SQLBrowseConnect(hconn, inString, inStringLength, outString,
- lenNeeded, </span><span>out</span><span> lenNeeded))
- {
- </span><span>throw</span> <span>new</span> ApplicationException(<span>"</span><span>Unabled to aquire SQL Servers from ODBC driver.</span><span>"</span><span>);
- }
- }
- list </span>=<span> outString.ToString();
- </span><span>int</span> start = list.IndexOf(<span>"</span><span>{</span><span>"</span>) + <span>1</span><span>;
- </span><span>int</span> len = list.IndexOf(<span>"</span><span>}</span><span>"</span>) -<span> start;
- </span><span>if</span> ((start > <span>0</span>) && (len > <span>0</span><span>))
- {
- list </span>=<span> list.Substring(start, len);
- }
- </span><span>else</span><span>
- {
- list </span>= <span>string</span><span>.Empty;
- }
- }
- }
- }
- }
- }
- </span><span>catch</span><span>
- {
- list </span>= <span>string</span><span>.Empty;
- }
- </span><span>finally</span><span>
- {
- </span><span>if</span> (hconn !=<span> IntPtr.Zero)
- {
- SQLFreeHandle(SQL_HANDLE_DBC, hconn);
- }
- </span><span>if</span> (henv !=<span> IntPtr.Zero)
- {
- SQLFreeHandle(SQL_HANDLE_ENV, hconn);
- }
- }
- </span><span>string</span>[] array = <span>null</span><span>;
- </span><span>if</span> (list.Length > <span>0</span><span>)
- {
- array </span>= list.Split(<span>'</span><span>,</span><span>'</span><span>);
- }
- </span><span>return</span><span> array;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取网内的数据库服务器名称(qlClientFactory方式)
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>服务器名称数组</span><span></span>
- <span>public</span> <span>static</span> <span>string</span><span>[] GetServersBySqlClientFactory()
- {
- DataTable dataSources </span>=<span> SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
- DataColumn column2 </span>= dataSources.Columns[<span>"</span><span>ServerName</span><span>"</span><span>];
- DataColumn column </span>= dataSources.Columns[<span>"</span><span>InstanceName</span><span>"</span><span>];
- DataRowCollection rows </span>=<span> dataSources.Rows;
- </span><span>string</span>[] array = <span>new</span> <span>string</span><span>[rows.Count];
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < array.Length; i++<span>)
- {
- </span><span>string</span> str2 = rows[i][column2] <span>as</span> <span>string</span><span>;
- </span><span>string</span> str = rows[i][column] <span>as</span> <span>string</span><span>;
- </span><span>if</span> (((str == <span>null</span>) || (str.Length == <span>0</span>)) || (<span>"</span><span>MSSQLSERVER</span><span>"</span> ==<span> str))
- {
- array[i] </span>=<span> str2;
- }
- </span><span>else</span><span>
- {
- array[i] </span>= str2 + <span>@"</span><span>\</span><span>"</span> +<span> str;
- }
- }
- Array.Sort</span><<span>string</span>><span>(array);
- </span><span>return</span><span> array;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 根据不带数据库的连接字符串,遍历查找出所有数据库实例
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>指定服务器的所有数据库</span><span></span>
- <span>public</span> <span>string</span><span>[] GetDataBases()
- {
- List</span><<span>string</span>> list = <span>new</span> List<<span>string</span>><span>();
- SqlConnection sqlConnection </span>= <span>new</span><span> SqlConnection(ConnectString);
- </span><span>string</span><span>[] result;
- </span><span>try</span><span>
- {
- sqlConnection.Open();
- SqlCommand sqlCommand </span>= <span>new</span> SqlCommand(<span>"</span><span>select name AS 数据库 from master..sysdatabases</span><span>"</span><span>, sqlConnection);
- SqlDataReader sqlDataReader </span>=<span> sqlCommand.ExecuteReader();
- </span><span>while</span><span> (sqlDataReader.Read())
- {
- list.Add(sqlDataReader.GetString(</span><span>0</span><span>));
- }
- sqlDataReader.Close();
- </span><span>string</span>[] array = <span>new</span> <span>string</span><span>[]
- {
- </span><span>"</span><span>master</span><span>"</span><span>,
- </span><span>"</span><span>tempdb</span><span>"</span><span>,
- </span><span>"</span><span>model</span><span>"</span><span>,
- </span><span>"</span><span>msdb</span><span>"</span><span>
- };
- </span><span>string</span>[] array2 =<span> array;
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < array2.Length; i++<span>)
- {
- </span><span>string</span> item =<span> array2[i];
- </span><span>try</span><span>
- {
- list.Remove(item);
- }
- </span><span>catch</span><span>
- {
- }
- }
- result </span>=<span> list.ToArray();
- }
- </span><span>catch</span><span>
- {
- result </span>=<span> list.ToArray();
- }
- </span><span>finally</span><span>
- {
- sqlConnection.Close();
- }
- </span><span>return</span><span> result;
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取SqlServer指定数据库的所有表
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><returns></returns></span><span>表集合,出错则产生异常</span><span></span>
- <span>public</span> <span>string</span><span>[] GetTables()
- {
- </span><span>string</span> sql = <span>"</span><span>select object_name (id) from sysobjects where xtype = 'u' and objectproperty (id,'IsMSShipped') = 0</span><span>"</span><span>;
- DataTable dt </span>=<span> ReturnDataTable(sql);
- List</span><<span>string</span>> Ls = <span>new</span> List<<span>string</span>><span>();
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < dt.Rows.Count; i++<span>)
- {
- Ls.Add(dt.Rows[i][</span><span>0</span><span>].ToString());
- }
- </span><span>return</span><span> Ls.ToArray();
- }
- </span><span>///</span> <span><summary>
- <span>///</span><span> 获取指定表的所有列
- </span><span>///</span> <span></span></summary></span>
- <span>///</span> <span><param name="TableName"></span><span>表名</span><span></span>
- <span>///</span> <span><returns></returns></span><span>列集合,出错则产生异常</span><span></span>
- <span>public</span> <span>string</span>[] GetColumns(<span>string</span><span> TableName)
- {
- </span><span>string</span> sql = <span>string</span>.Format(<span>"</span><span>select name from syscolumns where id=object_id('{0}')</span><span>"</span><span>,TableName);
- </span><span>try</span><span>
- {
- List</span><<span>string</span>> Ls = <span>new</span> List<<span>string</span>><span>();
- DataTable dt </span>=<span> ReturnDataTable(sql);
- </span><span>for</span> (<span>int</span> i = <span>0</span>; i < dt.Rows.Count; i++<span>)
- {
- Ls.Add(dt.Rows[i][</span><span>0</span><span>].ToString());
- }
- </span><span>return</span><span> Ls.ToArray();
- }
- </span><span>catch</span><span>
- {
- </span><span>throw</span><span>;
- }
- }
- }
- }</span>