📄 datebase.cs
字号:
using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Xml;
using System.IO;
using System.Windows.Forms;
using System.Reflection;
namespace StudentManager.DbLayer
{
#region Database
/// <summary>
/// 类,用于数据访问的类。
/// </summary>
public class Database : IDisposable
{
/// <summary>
/// 保护变量,数据库连接。
/// </summary>
protected SqlConnection Connection;
/// <summary>
/// 保护变量,数据库连接串。
/// </summary>
protected String ConnectionString;
/// <summary>
/// 构造函数
/// </summary>
public Database()
{
XmlDocument xdc = new XmlDocument();
try
{
string configFile = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
configFile += "\\Database.config";
xdc.Load(configFile);
this.ConnectionString = xdc.ChildNodes[1].ChildNodes[0].Attributes["value"].Value;
}
catch (Exception e)
{
MessageBox.Show("数据库连接配置错误:" + e.Message);
}
}
/// <summary>
/// 析构函数,释放非托管资源
/// </summary>
~Database()
{
try
{
if (Connection != null)
Connection.Close();
}
catch { }
try
{
Dispose();
}
catch { }
}
/// <summary>
/// 保护方法,打开数据库连接。
/// </summary>
public void Open()
{
if (Connection == null)
{
try
{
Connection = new SqlConnection(ConnectionString);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
if (Connection.State.Equals(ConnectionState.Closed))
{
try
{
Connection.Open();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
/// <summary>
/// 公有方法,关闭数据库连接。
/// </summary>
public void Close()
{
try
{
if (Connection != null)
Connection.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
/// <summary>
/// 公有方法,释放资源。
/// </summary>
public void Dispose()
{
// 确保连接被关闭
try
{
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
catch { }
}
/// <summary>
/// 公有方法,获取数据,返回一个SqlDataReader (调用后主意调用SqlDataReader.Close())。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>SqlDataReader</returns>
public SqlDataReader GetDataReader(String SqlString)
{
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception e)
{
MessageBox.Show("数据查询(GetDataReader)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
return null;
}
}
/// <summary>
/// 公有方法,获取数据,返回一个DataSet。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataSet</returns>
public DataSet GetDataSet(String SqlString)
{
DataSet dataset = new DataSet();
Open();
try
{
SqlDataAdapter adapter = new SqlDataAdapter(SqlString, Connection);
adapter.Fill(dataset);
}
catch (Exception e)
{
MessageBox.Show("数据查询(GetDataSet)失败,SqlString=" + SqlString + ",系统异常信息:" + e.Message);
}
return dataset;
}
/// <summary>
/// 公有方法,获取数据,返回一个DataTable。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataTable</returns>
public DataTable GetDataTable(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
return dataset.Tables[0];
}
/// <summary>
/// 公有方法,获取数据,返回一个DataRow。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>DataRow</returns>
public DataRow GetDataRow(String SqlString)
{
DataSet dataset = GetDataSet(SqlString);
dataset.CaseSensitive = false;
if (dataset.Tables[0].Rows.Count > 0)
{
return dataset.Tables[0].Rows[0];
}
else
{
return null;
}
}
/// <summary>
/// 公有方法,执行Sql语句。
/// </summary>
/// <param name="SqlString">Sql语句</param>
/// <returns>对Update、Insert、Delete为影响到的行数,其他情况为-1</returns>
public int ExecuteSQL(String SqlString)
{
int count = -1;
Open();
try
{
SqlCommand cmd = new SqlCommand(SqlString, Connection);
cmd.CommandTimeout = 30000000;
count = cmd.ExecuteNonQuery();
}
catch
{
count = -1;
}
return count;
}
}
#endregion Database
#region GetSafeData
/// <summary>
/// 从数据库中安全获取数据,即当数据库中的数据为NULL时,保证读取不发生异常。
/// </summary>
public class GetSafeData
{
#region DataRow
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为字符串类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.String.Empty</returns>
public static string ValidateDataRow_S(DataRow row, string colname)
{
if (row[colname] != DBNull.Value)
return row[colname].ToString();
else
return System.String.Empty;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为整数类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.Int32.MinValue</returns>
public static int ValidateDataRow_N(DataRow row, string colname)
{
if (row[colname] != DBNull.Value)
return Convert.ToInt32(row[colname]);
else
return System.Int32.MinValue;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为浮点数类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.Double.MinValue</returns>
public static double ValidateDataRow_F(DataRow row, string colname)
{
if (row[colname] != DBNull.Value)
return Convert.ToDouble(row[colname]);
else
return System.Double.MinValue;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为时间类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.DateTime.MinValue;</returns>
public static DateTime ValidateDataRow_T(DataRow row, string colname)
{
if (row[colname] != DBNull.Value)
return Convert.ToDateTime(row[colname]);
else
return System.DateTime.MinValue;
}
#endregion DataRow
#region DataReader
/// <summary>
/// 从SqlDataReader中安全获取数据
/// </summary>
/// <param name="reader">数据读取器SqlDataReader</param>
/// <param name="colname">列名</param>
/// <returns>列中的字符串数据,如果为空,则返回System.String.Empty</returns>
public static string ValidateDataReader_S(SqlDataReader reader, string colname)
{
if (reader.GetValue(reader.GetOrdinal(colname)) != DBNull.Value)
return reader.GetString(reader.GetOrdinal(colname));
else
return System.String.Empty;
}
public static int ValidateDataReader_N(SqlDataReader reader, string colname)
{
if (reader.GetValue(reader.GetOrdinal(colname)) != DBNull.Value)
return reader.GetInt32(reader.GetOrdinal(colname));
else
return System.Int32.MinValue;
}
public static double ValidateDataReader_F(SqlDataReader reader, string colname)
{
if (reader.GetValue(reader.GetOrdinal(colname)) != DBNull.Value)
return reader.GetDouble(reader.GetOrdinal(colname));
else
return System.Double.MinValue;
}
public static DateTime ValidateDataReader_T(SqlDataReader reader, string colname)
{
if (reader.GetValue(reader.GetOrdinal(colname)) != DBNull.Value)
return reader.GetDateTime(reader.GetOrdinal(colname));
else
return System.DateTime.MinValue;
}
#endregion DataReader
}
#endregion GetSafeData
#region SqlStringConstructor
/// <summary>
/// SQLString 的摘要说明。
/// </summary>
public class SqlStringConstructor
{
/// <summary>
/// 公有静态方法,将文本转换成适合在Sql语句里使用的字符串。
/// </summary>
/// <returns>转换后文本</returns>
public static String GetQuotedString(String pStr)
{
pStr = pStr.Trim();
return ("'" + pStr.Replace("'", "''") + "'");
}
}
#endregion SqlStringConstructor
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -