C # изменить хранимую процедуру программно - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий код C #, который должен позволить мне изменить (изменить) мою хранимую процедуру:

SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString);
ServerConnection srvCon = new ServerConnection(sqlCon);

sqlCon.Open();

Server srv = new Server(srvCon);
Database db = srv.Databases[sqlCon.Database];
StoredProcedure sp = new StoredProcedure(db, "spRDLDataFetcher");

sp.TextMode = false;
sp.AnsiNullsStatus = false;
sp.QuotedIdentifierStatus = false;
sp.TextBody = "SELECT blah FROM MyTable WHERE ID=1";
sp.Alter();

Однако вызов sp.Alter() выдает эту ошибку:

Microsoft.SqlServer.Management.Smo.FailedOperationException: 'Не удалось изменить для StoredProcedure' dbo.spRDLDataFetcher '.'

Внутреннее исключение: InvalidSmoOperationException: Вы не можете выполнить операцию Изменить объект в состоянии Создание.

Чего мне не хватает, чтобы заставить его изменить (обновить) эту хранимую процедуру

1 Ответ

0 голосов
/ 06 июня 2018

Хорошо, поэтому я выяснил, почему он не обновляет его.Кажется, по какой-то причине, перед тем, как я перезаписал textBody, нужно было sp.Refresh (); First.

SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString);
ServerConnection srvCon = new ServerConnection(sqlCon);

sqlCon.Open();

Server srv = new Server(srvCon);
Database db = srv.Databases[sqlCon.Database];
StoredProcedure sp = new StoredProcedure(db, "spRDLDataFetcher");

sp.TextMode = false;
sp.AnsiNullsStatus = false;
sp.QuotedIdentifierStatus = true;
sp.ImplementationType = ImplementationType.TransactSql;
sp.Schema = "dbo";

sp.Refresh(); //What was needed to make work
string orgSPText = sp.TextBody;

sp.TextBody = "SELECT blah FROM MyTable WHERE ID=1";
sp.Recompile = true;
sp.Alter();

sp.Recompile = true; действительно не нужно.Это будет работать без него, но мне нравится держать это там только для ударов и хихиканья.

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