-1

SQL Database テーブルに暗号化された名前の列があります (他のすべての列は暗号化されていません)。そして、暗号化された名前で列を復号化して、アプリケーションのユーザーに 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

多くの投稿を読みましたが、このケースは珍しいため、解決策はありませんでした。しかし、私は論理的に考え、最終的に自分で解決策を見つけました。

更新する必要がないため、更新関連のコードを 2 行削除するだけです。

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

gridda.Update(griddt);

これが誰かに役立つことを願っています..

于 2016-03-07T12:14:50.803 に答える
1

こんにちは Kay Lee: ビューに Coverter を実装することを検討すると、探しているものが正確に得られると思います。IValueConverter の実装では、Decrypt ルーチンを実装できます。コンバーターは、WPF バインディング ステートメントの拡張構文です。これが明確でない場合は、もう少し肉付けします。コンバーターの優れたリファレンスは次のとおりです。 http://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/

敬具、 マーク・ウォーデル

于 2016-03-07T03:44:49.727 に答える