【问题标题】:Can we use dbCommand and AddInParameter while inserting always encrypted columns我们可以在插入始终加密的列时使用 dbCommand 和 AddInParameter
【发布时间】:2017-09-05 16:59:06
【问题描述】:

在通过 .net 将始终加密的列插入表中时,我们有什么方法可以使用 dbCommand 和 AddInParameter?

db.AddInParameter(dbCommand, "@SSN", DbType.string, SSN);

【问题讨论】:

    标签: .net enterprise-library daab always-encrypted


    【解决方案1】:

    关于 .NET Framework 数据提供程序如何处理此问题 - 如果基础对象是 SqlParameter,则无需专门执行任何操作。

    更多细节: Develop using Always Encrypted with .NET Framework Data Provider

    用于 SQL Server 的 .NET Framework 数据提供程序会自动检测 并加密针对加密列的参数。

    我假设您使用的是企业库。查看 AddInParameter 方法 - 它在内部创建一个 DbParameter 并且 SqlParamter 继承自 DbParameter。似乎相同的规则适用于您的情况。

    话虽如此,您可能需要重新考虑使用企业库来支持直接的 ADO.NET、实体框架或像 Dapper 这样的微型 ORM。据我所知,企业库不是一个活跃的项目/正在维护。

    编辑

    看来您可以将 SqlParameter 传递给 dbCommand。

    示例(未测试)

                DatabaseProviderFactory factory = new DatabaseProviderFactory();
                Database db = factory.CreateDefault();
    
                var dbCommand = db.GetStoredProcCommand("spINSERT");
                SqlParameter p = new SqlParameter("xxxxxx", "yyyyyy") {SqlDbType = SqlDbType.VarChar};
                dbCommand.Parameters.Add(p);
                db.ExecuteNonQuery(dbCommand);
    

    【讨论】:

    • 感谢 William,但现有代码广泛使用了企业库,现在我们不想更改整个代码只是加密。是不是没有办法让它始终加密列与企业库一起使用?
    • SqlParameter 继承自 DbParameter。所以它应该工作。此外,您似乎可以将 SqlParameter 传递给 db 命令。虽然你应该测试一下。我已经编辑了我的答案。
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 2017-06-04
    • 2020-05-27
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多