0

C# でストアド プロシージャのパラメーターをプログラムで変更しようとしています。私は SMO に出会い、それを使用しようとしましたが、alter は失敗し続けます。これが私のコードです:

//alter parameter data type in stored procedure if parameter is not  varchar
public static void AlterSPParamInfo (string SPName,string parameterName,string connectionStringName)
{
    SqlConnection vSqlConnection = CreateSqlConnectionStr(connectionStringName);
    using(vSqlConnection)
        {
            ServerConnection vConnection = new ServerConnection(vSqlConnection);
            Server vServer = new Server(vConnection);
            Database vDatabase = vServer.Databases["HrSys"];
            var vTables = vDatabase.Tables;
            StoredProcedure sp = vDatabase.StoredProcedures[SPName];
            if(sp != null)
            {
                StoredProcedureParameter spParameter = sp.Parameters[parameterName];
                if(spParameter!=null)
                {
                    if(!spParameter.DataType.Equals(DataType.VarChar(50)))
                    {
                        spParameter.DataType = DataType.VarChar(50);
                        sp.QuotedIdentifierStatus = true;
                        try
                        {
                            sp.Refresh();
                            sp.Alter( );
                        }
                        catch(SqlServerManagementException ex)
                        {
                            //other code
                        }
                    }
                }         
 }

ここで何が欠けていますか?それとも、この方法でストアド プロシージャのパラメータを変更できないのでしょうか。Google またはMSDNで詳細情報を見つけようとしましたが、解決策が見つかりません...

4

2 に答える 2

0

接続文字列で使用されているユーザー ID のストアド プロシージャに対する Alter アクセス許可を付与していない可能性はありますか?

編集:これはDB側の設定です。

于 2013-03-05T10:03:13.100 に答える
0

多くのフォーラムで掘り下げた後、私は解決策を見つけました: Set sp.TextMode = false; その後、変更手順が正常に実行されます。 StoredProcedure.TextMode プロパティ

//alter parameter data type in stored procedure if parameter is not  varchar
public static void AlterSPParamInfo (string SPName,string parameterName,string connectionStringName)
{
    SqlConnection vSqlConnection = CreateSqlConnectionStr(connectionStringName);
    using(vSqlConnection)
        {
            ServerConnection vConnection = new ServerConnection(vSqlConnection);
            Server vServer = new Server(vConnection);
            Database vDatabase = vServer.Databases["HrSys"];
            var vTables = vDatabase.Tables;
            StoredProcedure sp = vDatabase.StoredProcedures[SPName];
            if(sp != null)
            {
                StoredProcedureParameter spParameter = sp.Parameters[parameterName];
                if(spParameter!=null)
                {
                    if(!spParameter.DataType.Equals(DataType.VarChar(50)))
                    {
                        spParameter.DataType = DataType.VarChar(50);
                        sp.QuotedIdentifierStatus = true;
                        try
                        {
                            sp.TextMode = false;
                            sp.Alter( );
                        }
                        catch(SqlServerManagementException ex)
                        {
                            //other code
                        }
                    }
                }         
 }
于 2013-03-06T07:42:43.413 に答える