开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。 因为Sqlserver数据库有多种登录方式,所以在构造函数中: #region [构造函数] /// summar
开发小型软件过程中,为了节约开发时间,数据库操作的代码自己都封装了。上篇介绍了SqlCeHelper这个关于操作本地数据库sdf的例子。现在介绍一下在Sqlserver中的代码。
因为Sqlserver数据库有多种登录方式,所以在构造函数中:
<span>#region</span>[构造函数] <span>///</span> <span><summary></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 获取网内的数据库服务器名称(API方式) </span><span>///</span> <span></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 lenNeeded) { outString.Capacity =<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></summary></span> <span>///</span><span> 获取网内的数据库服务器名称(qlClientFactory方式) </span><span>///</span> <span></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 ) { <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>string><span>(array); </span><span>return</span><span> array; } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 根据不带数据库的连接字符串,遍历查找出所有数据库实例 </span><span>///</span> <span></span> <span>///</span> <span><returns></returns></span><span>指定服务器的所有数据库</span><span></span> <span>public</span> <span>string</span><span>[] GetDataBases() { List</span>string> list = <span>new</span> Liststring><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 ) { <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></summary></span> <span>///</span><span> 获取SqlServer指定数据库的所有表 </span><span>///</span> <span></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>string> Ls = <span>new</span> Liststring><span>(); </span><span>for</span> (<span>int</span> i = <span>0</span>; i ) { Ls.Add(dt.Rows[i][<span>0</span><span>].ToString()); } </span><span>return</span><span> Ls.ToArray(); } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 获取指定表的所有列 </span><span>///</span> <span></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>string> Ls = <span>new</span> Liststring><span>(); DataTable dt </span>=<span> ReturnDataTable(sql); </span><span>for</span> (<span>int</span> i = <span>0</span>; i ) { Ls.Add(dt.Rows[i][<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
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Data; using System.Collections; using System.Runtime.InteropServices; namespace MyTool.DataBase { ////// SQL Server 数据库的操作类库。代码原创。 /// public class SqlServerHelper { #region[字段] private string connectstring = "Data Source=127.0.0.1;Initial Catalog=AdventureWorksDW;Integrated Security=True"; SqlConnection connect = null; SqlCommand command = null; private int CommandTimeOut = 30; #endregion #region[属性] /// /// 数据库连接字符串 /// public string ConnectString { get { return connectstring; } set { connectstring = value; } } #endregion <span>#region</span>[构造函数] <span>///</span> <span><summary></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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></summary></span> <span>///</span><span> 构造函数,初始化 </span><span>///</span> <span></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> #region[私有函数] private void Open() { try { if (connect.State != System.Data.ConnectionState.Open) { connect.Open(); } } catch (Exception ex) { throw (new Exception(ex.Message)); } } private void Close() { try { if (connect.State != System.Data.ConnectionState.Closed) { connect.Close(); } } catch (Exception ex) { throw (new Exception(ex.Message)); } } #endregion /// /// 测试是否能够连通 /// /// 布尔值 public bool ConnectTest() { try { connect.Open(); } catch { connect.Close(); return false; } return true; } /// /// 执行无返回的Sql语句,如插入,删除,更新 /// /// SQL语句 /// 受影响的条数 public int ExecuteNonQuery(string sqlstr) { try { Open(); command = new SqlCommand(sqlstr, connect); int num = command.ExecuteNonQuery(); command.Parameters.Clear(); Close(); return num; } catch { throw; } } /// /// 执行查询语句,返回DataSet /// /// Sql /// DataSet数据集 public DataSet ReturnDataSet(string sqlstr) { DataSet ds = new DataSet(); try { Open(); SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, connect); adapter.Fill(ds, "Obj"); } catch (Exception) { throw; } return ds; } /// /// 执行查询语句,返回DataTable /// /// Sqk /// DataTable数据表 public DataTable ReturnDataTable(string sqlstr) { return ReturnDataSet(sqlstr).Tables[0]; } /// /// 执行查询语句,返回DataReader /// /// Sql /// DataReader public SqlDataReader ReturnDataReader(string sqlstr) { try { Open(); command = new SqlCommand(sqlstr, connect); SqlDataReader myReader = command.ExecuteReader(); command.Parameters.Clear(); Close(); return myReader; } catch (System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } } /// /// 执行事务 /// /// public void ExecuteSqlTran(ArrayList SQLStringList) { Open(); command = new SqlCommand(); command.Connection = connect; SqlTransaction tx = connect.BeginTransaction(); command.Transaction = tx; try { for (int n = 0; n ) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { command.CommandText = strsql; command.ExecuteNonQuery(); } } tx.Commit(); } catch (Exception) { tx.Rollback(); throw; } } #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 = lenNeeded; if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString, lenNeeded, out lenNeeded)) { throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver."); } } list = outString.ToString(); int start = list.IndexOf("{") + 1; int len = list.IndexOf("}") - start; if ((start > 0) && (len > 0)) { list = list.Substring(start, len); } else { list = string.Empty; } } } } } } catch { list = string.Empty; } finally { if (hconn != IntPtr.Zero) { SQLFreeHandle(SQL_HANDLE_DBC, hconn); } if (henv != IntPtr.Zero) { SQLFreeHandle(SQL_HANDLE_ENV, hconn); } } string[] array = null; if (list.Length > 0) { array = list.Split(','); } return array; } /// /// 获取网内的数据库服务器名称(qlClientFactory方式) /// /// 服务器名称数组 public static string[] GetServersBySqlClientFactory() { DataTable dataSources = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources(); DataColumn column2 = dataSources.Columns["ServerName"]; DataColumn column = dataSources.Columns["InstanceName"]; DataRowCollection rows = dataSources.Rows; string[] array = new string[rows.Count]; for (int i = 0; i ) { string str2 = rows[i][column2] as string; string str = rows[i][column] as string; if (((str == null) || (str.Length == 0)) || ("MSSQLSERVER" == str)) { array[i] = str2; } else { array[i] = str2 + @"\" + str; } } Array.Sortstring>(array); return array; } /// /// 根据不带数据库的连接字符串,遍历查找出所有数据库实例 /// /// 指定服务器的所有数据库 public string[] GetDataBases() { Liststring> list = new Liststring>(); SqlConnection sqlConnection = new SqlConnection(ConnectString); string[] result; try { sqlConnection.Open(); SqlCommand sqlCommand = new SqlCommand("select name AS 数据库 from master..sysdatabases", sqlConnection); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { list.Add(sqlDataReader.GetString(0)); } sqlDataReader.Close(); string[] array = new string[] { "master", "tempdb", "model", "msdb" }; string[] array2 = array; for (int i = 0; i ) { string item = array2[i]; try { list.Remove(item); } catch { } } result = list.ToArray(); } catch { result = list.ToArray(); } finally { sqlConnection.Close(); } return result; } /// /// 获取SqlServer指定数据库的所有表 /// /// 表集合,出错则产生异常 public string[] GetTables() { string sql = "select object_name (id) from sysobjects where xtype = 'u' and objectproperty (id,'IsMSShipped') = 0"; DataTable dt = ReturnDataTable(sql); Liststring> Ls = new Liststring>(); for (int i = 0; i ) { Ls.Add(dt.Rows[i][0].ToString()); } return Ls.ToArray(); } /// /// 获取指定表的所有列 /// /// 表名 /// 列集合,出错则产生异常 public string[] GetColumns(string TableName) { string sql = string.Format("select name from syscolumns where id=object_id('{0}')",TableName); try { Liststring> Ls = new Liststring>(); DataTable dt = ReturnDataTable(sql); for (int i = 0; i ) { Ls.Add(dt.Rows[i][0].ToString()); } return Ls.ToArray(); } catch { throw; } } } }

저장된 절차는 성능을 향상시키고 복잡한 작업을 단순화하기 위해 MySQL에서 사전 컴파일 된 SQL 문입니다. 1. 성능 향상 : 첫 번째 편집 후 후속 통화를 다시 컴파일 할 필요가 없습니다. 2. 보안 향상 : 권한 제어를 통해 데이터 테이블 액세스를 제한합니다. 3. 복잡한 작업 단순화 : 여러 SQL 문을 결합하여 응용 프로그램 계층 로직을 단순화합니다.

MySQL 쿼리 캐시의 작동 원리는 선택 쿼리 결과를 저장하는 것이며 동일한 쿼리가 다시 실행되면 캐시 된 결과가 직접 반환됩니다. 1) 쿼리 캐시는 데이터베이스 읽기 성능을 향상시키고 해시 값을 통해 캐시 된 결과를 찾습니다. 2) MySQL 구성 파일에서 간단한 구성, query_cache_type 및 query_cache_size를 설정합니다. 3) SQL_NO_CACHE 키워드를 사용하여 특정 쿼리의 캐시를 비활성화하십시오. 4) 고주파 업데이트 환경에서 쿼리 캐시는 성능 병목 현상을 유발할 수 있으며 매개 변수의 모니터링 및 조정을 통해 사용하기 위해 최적화해야합니다.

MySQL이 다양한 프로젝트에서 널리 사용되는 이유에는 다음이 포함됩니다. 1. 고성능 및 확장 성, 여러 스토리지 엔진을 지원합니다. 2. 사용 및 유지 관리, 간단한 구성 및 풍부한 도구; 3. 많은 지역 사회 및 타사 도구 지원을 유치하는 풍부한 생태계; 4. 여러 운영 체제에 적합한 크로스 플랫폼 지원.

MySQL 데이터베이스를 업그레이드하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 백업, 2. 현재 MySQL 서비스 중지, 3. 새 버전의 MySQL 설치, 4. 새 버전의 MySQL 서비스 시작, 5. 데이터베이스 복구. 업그레이드 프로세스 중에 호환성 문제가 필요하며 Perconatoolkit과 같은 고급 도구를 테스트 및 최적화에 사용할 수 있습니다.

MySQL 백업 정책에는 논리 백업, 물리적 백업, 증분 백업, 복제 기반 백업 및 클라우드 백업이 포함됩니다. 1. 논리 백업은 MySQLDump를 사용하여 데이터베이스 구조 및 데이터를 내보내며 소규모 데이터베이스 및 버전 마이그레이션에 적합합니다. 2. 물리적 백업은 데이터 파일을 복사하여 빠르고 포괄적이지만 데이터베이스 일관성이 필요합니다. 3. 증분 백업은 이진 로깅을 사용하여 변경 사항을 기록합니다. 이는 큰 데이터베이스에 적합합니다. 4. 복제 기반 백업은 서버에서 백업하여 생산 시스템에 미치는 영향을 줄입니다. 5. AmazonRDS와 같은 클라우드 백업은 자동화 솔루션을 제공하지만 비용과 제어를 고려해야합니다. 정책을 선택할 때 데이터베이스 크기, 가동 중지 시간 허용 오차, 복구 시간 및 복구 지점 목표를 고려해야합니다.

mysqlclusteringenhancesdatabaserobustness andscalabilitydaturedingdataacrossmultiplenodes.itusesthendbenginefordatareplicationandfaulttolerance, highavailability를 보장합니다

MySQL에서 데이터베이스 스키마 설계 최적화는 다음 단계를 통해 성능을 향상시킬 수 있습니다. 1. 인덱스 최적화 : 공통 쿼리 열에서 인덱스 생성, 쿼리의 오버 헤드 균형 및 업데이트 삽입. 2. 표 구조 최적화 : 정규화 또는 정상화를 통한 데이터 중복성을 줄이고 액세스 효율을 향상시킵니다. 3. 데이터 유형 선택 : 스토리지 공간을 줄이기 위해 Varchar 대신 Int와 같은 적절한 데이터 유형을 사용하십시오. 4. 분할 및 하위 테이블 : 대량 데이터 볼륨의 경우 파티션 및 하위 테이블을 사용하여 데이터를 분산시켜 쿼리 및 유지 보수 효율성을 향상시킵니다.

tooptimizemysqlperformance, followthesesteps : 1) 구현 properIndexingToSpeedUpqueries, 2) useExplaintoAnalyzeanDoptimizeQueryPerformance, 3) AdvertServerConfigUrationSettingstingslikeInnodb_buffer_pool_sizeandmax_connections, 4) uspartOflEtOflEtOflestoI


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
