using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
namespace System.Data
{
/// <summary>
/// MultipleActiveResultSets=True;
/// </summary>
[Serializable]
public sealed class ConnectionStringBuilder : DbConnectionStringBuilder
{
#region Properties
public bool IsEncrypt
{
get { return base.ContainsKey("KEY"); }
}
public string[] CryptoKeys
{
set
{
if (value.Length < 2)
{
throw new ArgumentException("value.Length < 2");
}
base["KEY"] = string.Join(DbUtility.Separator, value);
}
get
{
object value;
if (base.TryGetValue("KEY", out value))
{
string[] args = value.ToString().Split(DbUtility.Separator[0]);
if (args.Length >= 2)
{
return args;
}
}
return new string[2];
}
}
#endregion
#region Methods
public ConnectionStringBuilder()
{
}
public ConnectionStringBuilder(string connectionString)
{
base.ConnectionString = connectionString;
}
internal string GetDecrypt()
{
if (this.IsEncrypt)
{
string[] args = this.CryptoKeys;
using (CryptoManaged coder = new CryptoManaged(args[0], args[1]))
{
return coder.Decrypt(base["ENTITY"].ToString());
}
}
return base.ConnectionString;
}
public override string ToString()
{
if (this.IsEncrypt)
{
string[] args = this.CryptoKeys;
using (CryptoManaged coder = new CryptoManaged(args[0], args[1]))
{
base.Remove("KEY");
string oldString = base.ConnectionString;
base.Clear();
base["ENTITY"] = coder.Encrypt(oldString);
this.CryptoKeys = args;
string newString = base.ToString().Replace("\"", string.Empty);
base.ConnectionString = oldString;
this.CryptoKeys = args;
return newString;
}
}
return base.ToString();
}
#endregion
}
}
![]()
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Rocky.App
{
public partial class ConnectionStringForm : Form
{
private ConnectionStringBuilder builder;
public ConnectionStringForm()
{
InitializeComponent();
}
private void ConnectionStringForm_Load(object sender, EventArgs e)
{
builder = new ConnectionStringBuilder();
}
private void textBox1_Enter(object sender, EventArgs e)
{
if (Clipboard.ContainsText())
{
textBox1.Text = Clipboard.GetText();
}
}
private void button1_Click(object sender, EventArgs e)
{
builder.ConnectionString = textBox1.Text;
builder.CryptoKeys = new string[] { CryptoManaged.MD5Hex("Rocky.TBox"), CryptoManaged.NewSalt };
textBox2.Text = builder.ToString();
}
}
}
View Code