--1.產生對稱金鑰並設定密碼為 rainmaker
bindingSource1 | 設定控制項的Binding |
dataGridView1 | 顯示Employee的資料 |
lblEmployeeId | 顯示Employee某筆資料的EmployeeID |
txtSalary | 顯示Employee某筆資料的Salary |
lblFirstName | 顯示Employee某筆資料的FirstName |
btnGetEmployee | 取得vwEN_Employee的資料,但是沒有先OPEN SYMMETRIC KEY |
btnGetEmployeeWithKey | 先OPEN SYMMETRIC KEY,取得vwEN_Employee的資料,最後再CLOSE SYMMETRIC KEY |
btnUpdEmpWithKey | 先OPEN SYMMETRIC KEY,更新Employee的資料,最後再CLOSE SYMMETRIC KEY |
private string ConnectionString
{
get
{
return System.Configuration.ConfigurationManager.ConnectionStrings["DEMO"].ConnectionString;
}
}
private void SetControlBindings(DataTable employeeData){
bindingSource1.DataSource = employeeData;
dataGridView1.DataSource = bindingSource1;
txtSalary.DataBindings.Clear();
txtSalary.DataBindings.Add("Text", bindingSource1, "Salary");
lblEmployeeId.DataBindings.Clear();
lblEmployeeId.DataBindings.Add("Text", bindingSource1, "EmployeeID");
lblFirstName.DataBindings.Clear();
lblFirstName.DataBindings.Add("Text", bindingSource1, "FirstName");
}
private void GetEmployeeDataWithoutKey(){
string queryString = @"SELECT [EmployeeID], [FirstName], [LastName], [BirthDay], [Salary]
FROM vwEN_Employee";
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
SqlDataAdapter da = new SqlDataAdapter(queryString, conn);
DataTable employeeData = new DataTable();
da.Fill(employeeData);
SetControlBindings(employeeData);
}
MessageBox.Show("GetEmployeeDataWithoutKey OK!");
}
private void GetEmployeeDataWithKey(){
string queryString = @"SELECT [EmployeeID], [FirstName], [LastName], [BirthDay], [Salary]
FROM vwEN_Employee";
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
try {
conn.Open();
//1.要先下 OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'; SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'", conn);
cmd.ExecuteNonQuery();
//2.再取資料 SqlDataAdapter da = new SqlDataAdapter(queryString, conn);
DataTable employeeData = new DataTable();
da.Fill(employeeData);
SetControlBindings(employeeData);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally {
//3.最後,要把Key Close SqlCommand cmd = new SqlCommand(@"CLOSE SYMMETRIC KEY DB_KEY1", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
}
MessageBox.Show("GetEmployeeDataWithKey OK!");
}
private void UpdateEmployeeDataWithKey(){
string queryString = @"UPDATE Employee SET Salary = @Salary Where EmployeeID = @EmployeeID";
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
try {
conn.Open();
//1.要先下 OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'; SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'", conn);
cmd.ExecuteNonQuery();
//2.再將資料更新 SqlCommand updCmd = new SqlCommand(queryString, conn);
updCmd.Prepare();
updCmd.Parameters.Clear();
var empIdParam = updCmd.Parameters.Add("EmployeeID", SqlDbType.Int);
empIdParam.Value = lblEmployeeId.Text;
var salaryParam = updCmd.Parameters.Add("Salary", SqlDbType.Money);
salaryParam.Value = txtSalary.Text;
updCmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally {
//3.最後,要把Key Close SqlCommand cmd = new SqlCommand(@"CLOSE SYMMETRIC KEY DB_KEY1", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
}
MessageBox.Show("UpdateEmployeeDataWithKey OK!");
}
private void OpenSymmetricKey(SqlConnection conn){
//1.要先下 OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'; SqlCommand cmd = new SqlCommand(@"OPEN SYMMETRIC KEY DB_KEY1 DECRYPTION BY PASSWORD = 'rainmaker'", conn);
cmd.ExecuteNonQuery();
}
private void CloseSymmetricKey(SqlConnection conn){
//3.最後,要把Key Close SqlCommand cmd = new SqlCommand(@"CLOSE SYMMETRIC KEY DB_KEY1", conn);
cmd.ExecuteNonQuery();
}