-1

我在 SQL 数据库表中有一个名称加密的列(所有其他列均未加密)。而且我必须解密具有加密名称的列以在 DataGrid 中显示给我的应用程序的用户,但不应更改 SQL 数据库的实际表。(必须保持为加密名称)。

我认为 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);
4

2 回答 2

1

我已经阅读了很多帖子,但我没有解决方案,因为这种情况很不寻常。但是,我只是逻辑思考,最终自己找到了解决方案。

我们只需要删除两行更新相关的代码,因为我们不需要更新。

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

gridda.Update(griddt);

希望这可以帮助某人..

于 2016-03-07T12:14:50.803 回答
1

你好 Kay Lee:我认为如果你考虑在你的视图中实现一个 Coverter,你会得到你正在寻找的东西。在您的 IValueConverter 实现中,您可以实现 Decrypt 例程。Converter 是 WPF 绑定语句中的扩展语法。如果不清楚,那么我将充实一些。这是转换器的一个很好的参考:http: //www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/

亲切的问候,马克·沃德尔

于 2016-03-07T03:44:49.727 回答