Sql server 在c中读取和更改Sql Server对象#

Sql server 在c中读取和更改Sql Server对象#,sql-server,c#-4.0,Sql Server,C# 4.0,我已经编写了一个示例Sql存储过程 USE [Db] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[usp_TestProcedure] AS BEGIN SET NOCOUNT ON; PRINT 'Good evening' END 工作正常。现在,我想使用c#读取和修改这个存储过程(以及类似于函数和视图的db对象)。

我已经编写了一个示例Sql存储过程

  USE [Db]
  GO   

  SET ANSI_NULLS ON
  GO
  SET QUOTED_IDENTIFIER ON
  GO
  ALTER PROCEDURE [dbo].[usp_TestProcedure] 
  AS
  BEGIN

     SET NOCOUNT ON;
     PRINT 'Good evening'
 END
工作正常。现在,我想使用c#读取和修改这个存储过程(以及类似于函数和视图的db对象)。可以用c#完成吗
我正在使用Server 2014和C#4.5。

您想在C#中使用DDL,可能是: 如果你想在C语言中实现,你必须使用ServerConnection而不是标准的SqlConnection。看看这个例子:

    public bool RunScriptsInTransaction(string script)
    {
        ServerConnection sCon = new ServerConnection(this.m_dbConnection);
        sCon.BeginTransaction();
        try
        {
            sCon.ExecuteNonQuery(script);
            sCon.CommitTransaction();
        }
        catch (Exception e)
        {
            sCon.RollBackTransaction();
            return false;
        }
        return true;
    }
您必须添加引用才能使用ServerConction:


也许您需要安装SQLSysClrTypes、SharedManagementObject并重新启动要运行它的计算机。

我现在不知道您有什么SQL SERVER,但对于SQL 2014 x64,它将是:

  • 您可以在此处下载ms文件的链接: 您需要从列表中进行检查:
  • ENU\x64\SQLSysClrTypes.msi

    ENU\x64\SharedManagementObjects.msi

    下载安装并重新启动

  • 这里是方法的完整代码(请在此过程中将sql连接字符串参数更改为服务器连接字符串):

  • 要运行它,只需编写:

            RunScriptsInTransaction(@"
        ALTER PROCEDURE [dbo].[usp_TestProcedure] 
          AS
          BEGIN
    
             SET NOCOUNT ON;
             PRINT 'Good evening'
         END
    
        GO
        ");
    

    @马西米利亚诺:谢谢你的快速回复。但是,这不是我想要的解决方案。这里给出了如何动态创建存储过程。我已经创建了存储过程,希望对其进行修改。例如,我想在过程中添加一行“带加密”。我如何才能做到这一点?是的。。。你能提供我完整的例子或链接遵循吗?谢谢回复。但是,在这里,我不知道过程中会发生什么。我的意思是,用户将给出过程的名称,我需要以编程方式修改它。这里,我的问题是如何从Sql server读取c#中存储过程的内容?你提供的代码是我要求的第二部分。谢谢你的帮助。谢谢,谢谢Arkadiusz给我指路。。我找到了这个链接,了解了更多的事情,谢谢你的帮助。
            RunScriptsInTransaction(@"
        ALTER PROCEDURE [dbo].[usp_TestProcedure] 
          AS
          BEGIN
    
             SET NOCOUNT ON;
             PRINT 'Good evening'
         END
    
        GO
        ");