【发布时间】:2012-06-27 17:54:01
【问题描述】:
我在 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();
但是,它只返回零,从不返回任何其他值。也不会抛出任何类型的异常。 我尝试选择结果并使用输出参数,但这也无济于事(输出参数也为零)。有什么建议吗?
【问题讨论】:
-
我无法直接回答您的问题,但作为一般建议,您可能会发现使用 SMO 从 .NET 应用程序获取 database properties 更容易。
标签: c# sql-server linq-to-sql stored-procedures