我正在使用SqlBulkCopy
和System.Data.Datatable
将数据插入我的数据库。我正在做这样的事情:
var table = new DataTable();
// Creating table schema
var newRow = table.NewRow();
newRow["FirstName"] = Parser.Parse(values[0])
newRow["LastName"] = Parser.Parse(values[1])
...
newRos["SSN"] = //here I need to encrypt by db certificate value[5] before set it to this row value
简单复制到db代码:
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.BatchSize = 100;
bulkCopy.DestinationTableName = "dbo.Member";
try
{
bulkCopy.WriteToServer(table);
}
catch (Exception)
{
transaction.Rollback();
connection.Close();
throw;
}
}
当然我可以稍后使用数据库中的存储过程设置加密列,但我想在一个事务中执行此操作。是否可以使用代码中的数据库加密string
值?
提前致谢!
答案 0 :(得分:1)
正如我所看到的,您可以选择以下选项之一(应该很容易实现):
使用C#代码进行加密
由于您拥有所有数据,因此可以使用.NET Framework相关类在那里进行加密。您可以测试它并确保获得相同的结果。
使用AFTER INSERT触发器
添加值后,您将修改并添加加密数据。触发器将是同一事务的一部分。只需使用CREATE TRIGGER语句创建一个新的触发器,检查该值是否为NULL,然后使用SQL语句放入加密值。
例如:
CREATE TRIGGER [dbo].[myTrigger]
ON [dbo].[Members]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Members
SET [EncryptedSSN] = EncryptByKey(Key_GUID('SSN_Key'), inserted.SSN)
FROM inserted
INNER JOIN dbo.Members On inserted.id = Members.id
END
希望这有帮助。