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 中运行它时,它可以正常工作,以 MB 为单位返回当前的 DB 大小。

我希望它在应用程序中运行,所以我将它添加到 linq to sql 数据上下文中,它生成了以下代码:

    [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 回答