ldj/epickpublic/utils/ConnectionConfig.cs

150 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
using System.Security.Cryptography;
namespace DeiNiu.Utils
{
/// <summary>
/// SQL数据库服务器配置静态类
/// </summary>
public class ConntionConfig
{
public static string connString = "SqlconnectionString";
/// <summary>
/// 检查配置信息
/// </summary>
/// <returns>完整有效返回true,无效则启动配置界面</returns>
public static bool CheckConntionConfig(string conn=null)
{
if (CheckedConnection(conn))
{
return true;
}
else
{
return false;// CheckedConfig();
}
}
/*
/// <summary>
/// 验证配置信息
/// </summary>
private static bool CheckedConfig()
{
MessageBox.Show("数据库服务器无法连接,请重新配置。",
"系统提示",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
SvrConf svrConf = new SvrConf();
svrConf.ShowDialog();
if (MessageBox.Show("是否现在进入系统?", "询问",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
{
return CheckConntionConfig();
}
else
{
return false;
}
}
*/
/// <summary>
/// 验证配置信息的数据库连接
/// </summary>
private static bool CheckedConnection(string conn=null)
{
string connectionString = string.IsNullOrEmpty(conn) ? ConString() : conn;
return !string.IsNullOrEmpty(connectionString) &&
TestConntion(connectionString);
}
/// <summary>
/// 测试与服务器数据库是否成功连接
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <returns></returns>
public static bool TestConntion(string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Open();
WmsConstants.SQL_CONN_WMS = connectionString;//set con in memory
return true;
}
catch
{
return false;
}
finally
{
conn.Close();
conn.Dispose();
}
}
}
/// <summary>
/// 数据库连接字符串,自动判断加密状态并获取对应连接字符串。
/// </summary>
/// <returns></returns>
public static string ConString()
{
if (IsEncrypt())
{
string cstr = ConfigurationManager.AppSettings[connString];
try
{
//解密后的数据库连接字符串
cstr = DESEncrypt.Decrypt(cstr);
return cstr;
}
catch
{
//如果勾选加密,第一次登陆时取到的是未加密连接字符串,所以直接返回。如果返回空字符串会导致首次登陆失败。
//ConfigurationManager.AppSettings["ConnectionString"] = string.Empty;
//return string.Empty;
return cstr;
}
}
else
{
//无须解密的数据库连接字符串
return ConfigurationManager.AppSettings[connString];
}
}
/// <summary>
/// 验证是否已加密
/// </summary>
/// <returns></returns>
internal static bool IsEncrypt()
{
switch (ConfigurationManager.AppSettings["ConStringEncrypt"])
{
case "1":
case "TRUE":
case "true":
return true;
default:
return false;
}
}
}
}