C# 以编程方式更改存储过程
C# alter stored procedure programmatically
我有以下 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: 'Alter failed for StoredProcedure 'dbo.spRDLDataFetcher'. '
Inner Exception: InvalidSmoOperationException: You cannot perform operation Alter on an object in state Creating.
为了让它改变(更新)该存储过程,我错过了什么?
好吧,我发现它为什么不更新了。似乎,无论出于何种原因,在我覆盖 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;真的不需要。没有它它也能工作,但我喜欢把它放在那里只是为了踢球和咯咯笑。
我有以下 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: 'Alter failed for StoredProcedure 'dbo.spRDLDataFetcher'. '
Inner Exception: InvalidSmoOperationException: You cannot perform operation Alter on an object in state Creating.
为了让它改变(更新)该存储过程,我错过了什么?
好吧,我发现它为什么不更新了。似乎,无论出于何种原因,在我覆盖 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;真的不需要。没有它它也能工作,但我喜欢把它放在那里只是为了踢球和咯咯笑。