2016-03-07 59 views
-1

我在SQL數據庫表中具有加密名稱(所有其他列未加密)的列。我必須使用加密名稱解密列以在DataGrid中顯示給我的應用程序的用戶,但不應更改實際的SQL數據庫表(必須保留爲加密名稱)。如何更改DataTable列的值並僅在DataGrid中顯示而不更新數據庫的實際表格

我覺得UpdateCommand的工作原理是更新實際的表格,我不得不在UpdateCommand下面找到一個替代方案。

或者有沒有其他的方法來解密DataTable上只有1列,而不影響實際的數據庫表?

我簡單的代碼是,

SqlCommand gridcomm = new SqlCommand(); 
gridcomm.Connection = Conn; 

gridcomm.CommandText = "SELECT Id, customername, phonenumber FROM customers"; 

SqlDataAdapter gridda = new SqlDataAdapter(gridcomm); 

SqlDataReader gridreader = gridcomm.ExecuteReader(); 
while (gridreader.Read()) 
{ 
} 
gridreader.Close(); 

DataTable griddt = new DataTable("customers"); 
gridda.Fill(griddt); 

foreach (DataRow row in griddt.Rows) 
{ 
    string strcustomername = (string) row["customername"].ToString(); 
    bytecustomername = Convert.FromBase64String(strcustomername); 
    string decryptedcustomername = DecryptStringFromBytes_Aes(bytecustomername, byteAESKey, byteAESIV); 

    row["customername"] = decryptedcustomername; 
} 

gridda.UpdateCommand = new SqlCommandBuilder(gridda).GetUpdateCommand(); 

dataGrid_Totalcustomerlist.ItemsSource = griddt.DefaultView; 
gridda.Update(griddt); 

回答

0

我已經看了很多帖子,但因爲這種情況是不尋常的有我無解。但是,我只是在邏輯上思考並最終找到了解決方案。

我們只需要刪除2行更新相關的代碼,因爲我們不需要更新。

gridda.UpdateCommand = new SqlCommandBuilder(gridda).GetUpdateCommand(); 

gridda.Update(griddt); 

希望這可以幫助別人..

1

你好凱李:我認爲,如果你看看你的視圖實現Coverter你會得到你正在尋找什麼。在你的IValueConverter實現中,你可以實現Decrypt例程。 A Converter是WPF綁定語句中的擴展語法。如果不清楚,我會再補充一些。這裏是轉換器有很大的參考:http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/

親切的問候, 馬克·沃德爾

+0

我真的很感激你的卓越。然而,我理解鏈接的內容,但是我很難用Converter編寫代碼,因爲我的專業僅僅是遠離軟件行業的生物化學。請指導我簡單地修改上面的代碼或另一種比Converter更簡單的方法?再一次,非常感謝。 –

+0

明天我會研究,可能會有一些問題給你。 –

+0

請進入你的更新命令,並從中請求我的sql語句?另外選擇SQL。我想我有一個簡單的想法。 –

相關問題