通过c#ASP.Net中的网页运行TSQLScripts

通过c#ASP.Net中的网页运行TSQLScripts,c#,tsql,sql-server-2008-r2,C#,Tsql,Sql Server 2008 R2,我正在尝试构建可用于在线运行TSQL脚本的网页 我的数据库有很多数据库,我使用系统管理员帐户来执行这些脚本 在建立网页之后 我可以在所有数据库中成功运行简单的CRUD语句 我只能为默认连接的数据库(MyDB1)运行DML语句 无论何时创建新对象,它都位于MyDB1中。但是我想在另一个数据库中运行/创建对象 我试着运行下面的命令,它非常简单,在SSMS中工作得非常好 USE MyDB2 GO CREATE PROCEDURE [dbo].MyProc AS BEGIN INSERT I

我正在尝试构建可用于在线运行TSQL脚本的网页

我的数据库有很多数据库,我使用系统管理员帐户来执行这些脚本

在建立网页之后

  • 我可以在所有数据库中成功运行简单的CRUD语句
  • 我只能为默认连接的数据库(MyDB1)运行DML语句
  • 无论何时创建新对象,它都位于MyDB1中。但是我想在另一个数据库中运行/创建对象
  • 我试着运行下面的命令,它非常简单,在SSMS中工作得非常好

    USE MyDB2
    GO
    
    CREATE PROCEDURE [dbo].MyProc
    
    AS
    BEGIN
        INSERT INTO
            dbo.Table1
            (
            FieldA
            , FieldB
            , FieldC
            )
        VALUES
            (
            'AAA'
            , 'BBB'
            , 'CCC'
            )
    
    END
    
    但我收到了错误信息:

    'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
    
    我执行发布脚本的c#代码如下:

    DataTable dt = new DataTable();
                try
                {
                    using (SqlConnection cn = new SqlConnection("MyConnString"))
                    {
                        cn.Open();
                        SqlCommand cmd = new SqlCommand(sql, cn);
    
                        using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            if (dr.HasRows)
                            {
                                dt.Load(dr);
                            }
    
                            dr.Close();
                        }
    
                        cn.Close();
                    }
                }
                catch (Exception ex)
                {
                    //Log Error
                }
    

    如果我删除了,USE语句,它是可以的,但它在默认的数据库中创建了对象,即MyDB1。如何调整代码以在MyDB2中运行它?

    USE
    是一个SSMS命令,而不是SQL语句


    更改连接字符串以指定适当的数据库。

    与实现无关。请确保您没有将此网页公开给外部世界。整个项目读起来就像是IT安全专业人士的讣告。顺便说一句,
    GO