通过C#创建存储过程

时间:2011-12-28 18:19:30

标签: c# sql-server-2008

我正在尝试在我的网络应用程序中创建一个种子数据库,我能够创建数据库,填充表格,我只是坚持让存储过程工作。这是我到目前为止,但我得到CREATE / ALTER PROCEDURE'必须是查询批处理中的第一个语句。\ r \ n'GO'附近的语法不正确。我也尝试删除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();
                            }
                        }

4 个答案:

答案 0 :(得分:6)

“GO”是批处理分隔符。这不是T-SQL声明。删除“USE”和“GO”两行,然后重试。

答案 1 :(得分:1)

正如其他人所提到的,“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();
    }
}

答案 2 :(得分:1)

您可以非常轻松地为打开的SqlConnection设置或更改当前数据库,而不是使用'USE [DataBase] Go':

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);
    }
}

答案 3 :(得分:0)

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