通过c#创建存储过程

本文关键字:存储过程 创建 通过 | 更新日期: 2023-09-27 18:19:08

我试图在我的web应用程序中创建一个种子DB,我能够创建DB,填充表,我只是停留在让存储过程工作。这是我到目前为止所拥有的,但我得到CREATE/ALTER PROCEDURE必须是查询批处理中的第一个语句。'r' ningo附近的正确语法。我也试图删除GO,并在USE语句和创建过程之间添加'r'n,但没有运气。如有任何帮助,不胜感激。

StringBuilder sbSP = new StringBuilder();
sbSP.AppendLine("USE [" + txtDBName.Text + "]");
sbSP.AppendLine("GO");
sbSP.AppendLine("CREATE PROCEDURE [spInsertADAuthorization] @AD_Account varchar(255),@AD_SID varchar(255),@AD_EmailAddress varchar(255),@DateImported datetime,@Active bit AS BEGIN SET NOCOUNT ON; INSERT INTO AD_Authorization (AD_Account, AD_SID, AD_EmailAddress, DateImported, Active) VALUES (@AD_Account,@AD_SID,@AD_EmailAddress,@DateImported,@Active) END");
sbSP.AppendLine("GO");
using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
     using (SqlCommand cmd = new SqlCommand(sbSP.ToString(), connection))
                            {
                                connection.Open();
                                cmd.CommandType = CommandType.Text;
                                cmd.ExecuteNonQuery();
                                connection.Close();
                            }
                        }

通过c#创建存储过程

"GO"是批分隔符。它不是一个T-SQL语句。删除"USE"和两个"GO"行,然后再试一次。

正如其他人提到的,"GO"命令只是一个批处理分隔符,由SSMS进行解释。您需要做的是按如下方式创建存储过程:

string sql = string.Format("CREATE PROCEDURE [{0}]..[spInsertADAuthorization] @AD_Account varchar(255),@AD_SID varchar(255),@AD_EmailAddress varchar(255),@DateImported datetime,@Active bit AS BEGIN SET NOCOUNT ON; INSERT INTO AD_Authorization (AD_Account, AD_SID, AD_EmailAddress, DateImported, Active) VALUES (@AD_Account,@AD_SID,@AD_EmailAddress,@DateImported,@Active) END", txtDBName.Text);
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(sql, connection))
    {
        connection.Open();
        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();
        connection.Close();
    }
}

不使用'USE [DataBase] Go',您可以很容易地设置或更改打开的SqlConnection的当前数据库:

connection.ChangeDatabase("YourDB");

一个例子:

private static void ConctDatabase(string connectionString)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        MessageBox.Show("Database: {0}", conn.Database);
        conn.ChangeDatabase("Northwind");
        MessageBox.Show("Database: {0}", conn.Database);
    }
}

如果您正在考虑创建数据库并在代码中维护版本,您可能需要考虑使用类似Migrator框架的东西,而不是手工编写所有SQL。