1

SQL Server 2005 データベースに次のストアド プロシージャがあります (単にデータベース サイズを MB 単位で返すことを意味します)。

ALTER PROCEDURE [dbo].[dbSize]
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sizeMb int
DECLARE @DB_NAME varchar(100)

SELECT @DB_NAME = DB_NAME()

SELECT @sizeMb = (size*8)/1024 FROM sys.master_files
    WHERE DB_NAME(database_id) = @DB_NAME
    AND Name = @DB_NAME

RETURN @sizeMb  
END

これを SQL Server Management Studio で実行すると、正しく動作し、現在の DB サイズが MB 単位で返されます。

これをアプリケーション内で実行したいので、linq to sql datacontext に追加すると、次のコードが生成されました。

    [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.dbSize")]
    public int dbSize()
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
        return ((int)(result.ReturnValue));
    }

私はそれを次のように呼びます:

int dbSize = db.dbSize();

ただし、それはゼロを返すだけで、それ以外は何も返しません。いかなる種類の例外もスローされません。結果を選択して出力パラメーターを使用して実験しましたが、どちらも役に立ちませんでした (出力パラメーターもゼロでした)。助言がありますか?

4

1 に答える 1

1

私は同じ問題に遭遇しました。ばかげているように聞こえますが、ストアドプロシージャからの値を含む単一の列を持つ単一の行を返す必要があります。L2Sはに似たようなことはしませんExecuteScalar(...)

UDFを使用すると、運が良くなります。 この投稿は問題をうまく物語っています。

于 2012-06-27T19:12:02.050 に答える