我可以使用SQLCLR存储过程更新数据库表的列(使用某些已编译的dll)

什韦塔·萨克塞纳(Shweta Saxena)

我想使用查询或存储过程来更新数据库表的几列的值,但想使用我的C#库来更改值。

例如,我希望将表T的A,B,C列替换为Encrypt(A),Encrypt(B)和Encrypt(C),其中Encrypt是C#库的一部分。我本可以在一个简单的控制台应用程序中完成此操作,但是我必须对许多表中的许多列执行此过程。

我可以使用SQLCLR存储过程/查询在SQL Server Management Studio中执行此过程吗?如果有人可以提供帮助,那将是非常不错的。

public class SP
{
[Microsoft.SqlServer.Server.SqlFunction()]
public static void Enc()
{
 using (SqlConnection connection = new SqlConnection("context connection=true"))
    {            
        connection.Open();
        SqlCommand command;
        SqlCommand command1;
        for (int i = 0; i < 1; i++)
        {                
            command = new SqlCommand("SELECT " + tableFieldArray[i, 1].ToString() + " FROM " + tableFieldArray[i, 0].ToString(), connection);

            SqlDataReader reader = command.ExecuteReader();                
            using (reader)
            {
                while (reader.Read())
                {

                    if (!reader.IsDBNull(0) && !String.IsNullOrEmpty(reader.GetString(0)))
                    {                            
                            //SqlContext.Pipe.Send("Data = " + reader.GetString(0) + "; Encrypted = " + Encrypt(reader.GetString(0)));
                            SqlContext.Pipe.Send("UPDATE " + tableFieldArray[i, 0].ToString() + " SET "
                                                                 + tableFieldArray[i, 1].ToString() + " = '" + Encrypt(reader.GetString(0)) + "' "
                                                                 + "WHERE " + tableFieldArray[i, 1].ToString() + " = '" + reader.GetString(0) + "'");                             
                            //query = "UPDATE " + tableFieldArray[i, 0].ToString() + " SET "
                            //                                     + tableFieldArray[i, 1].ToString() + " = '" + Encrypt(reader.GetString(0)) + "' "
                            //                                     + "WHERE " + tableFieldArray[i, 1].ToString() + " = '" + reader.GetString(0) + "'";                                                                                        
                            command1 = new SqlCommand("UPDATE " + tableFieldArray[i, 0].ToString() + " SET "
                                                                 + tableFieldArray[i, 1].ToString() + " = '" + Encrypt(reader.GetString(0)) + "' "
                                                                 + "WHERE " + tableFieldArray[i, 1].ToString() + " = '" + reader.GetString(0) + "'",connection);
                    }                                                                                                
                }                    
            }

            SqlCommand command1 = new SqlCommand(query , connection);
            command1.ExecuteNonQuery();
        }

        connection.Close();
    }
}
public static string Encrypt(string TextFromForm)
{
    //implementation
}
}
}
所罗门·鲁兹基(Solomon Rutzky)

可以使用SQLCLR从C#调用加密,尽管这是错误的方法。如果需要执行自定义算法,则应将其封装到SQLCLR函数中,以便可以在UPDATE语句甚至INSERT或SELECT或任何位置中使用它。就像是:

public class SP
{
  [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
  public static SqlString EncryptByAES(SqlString TextToEncrypt)
  {
     return DoSomething(TextToEncrypt.Value);
  }
}

然后,您可以按以下方式使用该功能:

UPDATE tb
SET    tb.FieldA = EncryptByAES(tb.FieldA)
FROM   dbo.TableName tb
WHERE  tb.FieldA some_test_to_determine_that_FieldA_is_not_alreay_encrypted;

但是,在编写自定义加密算法之前,您可能需要检查几个内置配对的ENCRYPTBY / DECRYPTBY函数,它们可能完全满足您的需求:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用“旧”代码访问已迁移的EF数据库吗?

来自分类Dev

我可以使用SqlBulkCopy将相同的主键更新到远程数据库吗?

来自分类Dev

我可以使用SqlBulkCopy将相同的主键更新到远程数据库吗?

来自分类Dev

是否可以使用Graph更新保存到我的数据库中的实体?

来自分类Dev

我可以使用Navigation Properties加载带有表的整个数据库吗?

来自分类Dev

我可以使用excel更新表上的数据吗?

来自分类Dev

是否可以使用过程从数据库MVC样式中获取数据?

来自分类Dev

我可以使用Git备份MongoDB数据库吗?具体来说,我可以在github存储库中包含mongo数据目录吗?

来自分类Dev

我可以使用更新存储过程来保存带有微风的视图吗?

来自分类Dev

我可以使用Oracle存储过程作为Spotfire的数据源吗?

来自分类Dev

存储过程未更新数据库

来自分类Dev

使用存储过程从数据库获取数据

来自分类Dev

使桌面客户端可以使用更新的EF数据库迁移而无需更新

来自分类Dev

使用存储过程在sybase数据库表中插入记录-Delphi编程

来自分类Dev

在PostgreSQL中使用存储过程动态传递数据库和表名

来自分类Dev

使用存储过程在sybase数据库表中插入记录-Delphi编程

来自分类Dev

如何使用存储过程从给定的表名中找到数据库的名称?

来自分类Dev

是否可以使用url直接更新数据库?(不使用php)

来自分类Dev

可以使用Hibernate将Locale对象存储在数据库中

来自分类Dev

可以使用Hibernate将Locale对象存储在数据库中

来自分类Dev

我可以使用任何文件作为我的游戏数据库吗?

来自分类Dev

是否可以使用数据库优先的Entity Framework 6更新SQLite数据库文件?

来自分类Dev

使用变量更新数据库表

来自分类Dev

使用循环更新数据库表

来自分类Dev

使用可变数据库名称执行存储过程

来自分类Dev

使用EF(数据库优先)在mvc中的存储过程

来自分类Dev

Azure SQL数据库:使用Dapper调用存储过程时,“未选择任何列”

来自分类Dev

是否可以使用 Symfony 1.4 中的 schema.yml 更新数据库结构?

来自分类Dev

是否可以使用dplyr包向SQLite数据库表插入(添加)行?

Related 相关文章

  1. 1

    我可以使用“旧”代码访问已迁移的EF数据库吗?

  2. 2

    我可以使用SqlBulkCopy将相同的主键更新到远程数据库吗?

  3. 3

    我可以使用SqlBulkCopy将相同的主键更新到远程数据库吗?

  4. 4

    是否可以使用Graph更新保存到我的数据库中的实体?

  5. 5

    我可以使用Navigation Properties加载带有表的整个数据库吗?

  6. 6

    我可以使用excel更新表上的数据吗?

  7. 7

    是否可以使用过程从数据库MVC样式中获取数据?

  8. 8

    我可以使用Git备份MongoDB数据库吗?具体来说,我可以在github存储库中包含mongo数据目录吗?

  9. 9

    我可以使用更新存储过程来保存带有微风的视图吗?

  10. 10

    我可以使用Oracle存储过程作为Spotfire的数据源吗?

  11. 11

    存储过程未更新数据库

  12. 12

    使用存储过程从数据库获取数据

  13. 13

    使桌面客户端可以使用更新的EF数据库迁移而无需更新

  14. 14

    使用存储过程在sybase数据库表中插入记录-Delphi编程

  15. 15

    在PostgreSQL中使用存储过程动态传递数据库和表名

  16. 16

    使用存储过程在sybase数据库表中插入记录-Delphi编程

  17. 17

    如何使用存储过程从给定的表名中找到数据库的名称?

  18. 18

    是否可以使用url直接更新数据库?(不使用php)

  19. 19

    可以使用Hibernate将Locale对象存储在数据库中

  20. 20

    可以使用Hibernate将Locale对象存储在数据库中

  21. 21

    我可以使用任何文件作为我的游戏数据库吗?

  22. 22

    是否可以使用数据库优先的Entity Framework 6更新SQLite数据库文件?

  23. 23

    使用变量更新数据库表

  24. 24

    使用循环更新数据库表

  25. 25

    使用可变数据库名称执行存储过程

  26. 26

    使用EF(数据库优先)在mvc中的存储过程

  27. 27

    Azure SQL数据库:使用Dapper调用存储过程时,“未选择任何列”

  28. 28

    是否可以使用 Symfony 1.4 中的 schema.yml 更新数据库结构?

  29. 29

    是否可以使用dplyr包向SQLite数据库表插入(添加)行?

热门标签

归档