【问题标题】:Update stored procedure using C#?使用 C# 更新存储过程?
【发布时间】:2020-08-28 05:19:08
【问题描述】:

我有 10 台数据库服务器,大多数程序都是一样的。 所以我打算做程序分发程序。

为了方便应用,我想使用“工具制作的程序修改代码”本身。 例如,当我点击 SSMS 上程序的修改按钮时,代码如下所示。

USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[HongTestProcedure]    Script Date: 2020-08-28 오전 11:09:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      hong
-- Create date: 2020-03-07
-- =============================================
ALTER PROCEDURE [dbo].[HongTestProcedure]
    -- Add the parameters for the stored procedure here
    @ID varchar(10)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT *
    FROM table
END

然后,如果我想修改程序的参数。 也许代码如下:

USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[HongTestProcedure]    Script Date: 2020-08-28 오전 11:09:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      hong
-- Create date: 2020-03-07
-- =============================================
ALTER PROCEDURE [dbo].[HongTestProcedure]
    -- Add the parameters for the stored procedure here
    @ID varchar(10)
    @ID2 varchar(10) -- it is added.
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT *
    FROM table
END

我认为该程序有一个文本框和按钮。 我想插入以上所有代码。 也许它看起来像:

所以,我尝试如下代码:

public bool UpdateProcedure(string dbip, string query)
{
    DataSet ds = new DataSet();

    SqlConnection sqlConn = new SqlConnection("server = " + dbip + dbInfo);
    sqlConn.Open();

    SqlCommand sqlComm = new SqlCommand(query, sqlConn);
    sqlComm.ExecuteNonQuery();

    return true;
} 

如果运行成功,我将在 10 个数据库服务器上运行查询。 但它返回错误消息。甚至可以在 SSMS 中运行。

  • “GO”附近的语法不正确
  • CREATE/ALTER PROCEDURE 必须是查询批处理中的第一条语句

我能解决吗?

【问题讨论】:

  • 为什么要自己动手?为什么不使用像DbUpRoundhousE 这样的成熟、久经考验、经过验证的解决方案,而不是重新发明轮子?
  • "GO" 不是 SQL 命令,它是特定于 SSMS 的分隔符

标签: sql sql-server stored-procedures ssms


【解决方案1】:

是的。因为您可以在 C# 中将其构造为动态 SQL 并打开 SQL 连接并将动态 SQL 传递给EXEC sp_executesql @DynamicSQL。这将在所需的数据库中创建所需的 SP。

【讨论】:

  • 哇。如果可能的话,它对我有很大帮助。但是,我尝试在 c# 中。它不起作用。所以,首先我尝试在 SSMS 中运行。 (如 EXEC sp_executesql N'@AboveQuery')。但它有两个问题。首先,它也返回上面相同的错误信息。它还需要删除“GO”。其次需要修改查询,如果有引号,则需要双引号。我在做你想做的事吗?
  • @H.YK,您可以使用 SMO 库 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery 方法执行带有 GO 批处理分隔符的脚本。见docs.microsoft.com/en-us/dotnet/api/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多