Создание хранимой процедуры через C # - PullRequest
6 голосов
/ 28 декабря 2011

Я пытаюсь создать начальную БД в своем веб-приложении, и я смог создать БД, заполнить таблицы, я просто застрял в том, чтобы заставить хранимые процедуры работать.Вот что у меня есть, но я получаю CREATE / ALTER PROCEDURE ', должен быть первым оператором в пакете запроса. \ R \ nНеверный синтаксис рядом с' GO '.Я тоже попытался удалить GO, а также добавить \ r \ n между оператором USE и процедурой создания, но безуспешно.Любая помощь будет оценена.

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 ]

6 голосов
/ 28 декабря 2011

«GO» - это сепаратор периодического действия. Это не инструкция T-SQL. Удалите строки «USE» и обе строки «GO» и повторите попытку.

1 голос
/ 11 мая 2014

Вместо использования «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);
    }
}
1 голос
/ 28 декабря 2011

Как уже упоминалось, команда "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();
    }
}
0 голосов
/ 28 декабря 2011

Если вы смотрите на создание базы данных и поддержку версий в своем коде, вы можете рассмотреть возможность использования чего-то вроде Migrator Framework вместо написания вручную всего этого SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...