【问题标题】:Can't change sql server file database size [duplicate]无法更改 sql server 文件数据库大小 [重复]
【发布时间】:2013-02-06 12:26:16
【问题描述】:

我无法使用 C# 查询更改数据库文件大小。出于某种原因,我得到一个例外:“'@databaseName' 附近的语法不正确。

这是执行查询的代码:

command = connection.CreateCommand();
command.CommandText = @"
                        ALTER DATABASE @databaseName
                        MODIFY FILE
                        (NAME = @databaseFile, SIZE = @newSize)
                        ";
dbParam = command.CreateParameter();
dbParam.ParameterName = "databaseFile";
dbParam.Value = dbFileName;
command.Parameters.Add(dbParam);
dbParam = command.CreateParameter();
dbParam.ParameterName = "newSize";
dbParam.Value = newSize;
command.Parameters.Add(dbParam);
dbParam = command.CreateParameter();
dbParam.ParameterName = "databaseName";
dbParam.Value = databaseName;
command.Parameters.Add(dbParam);
command.ExecuteNonQuery();

现在可能有几个问题。首先数据库在不同的机器上,所以db文件路径不会不同吗?

【问题讨论】:

    标签: c# sql-server


    【解决方案1】:

    有些东西不能参数化。这包括 DML 中的表名和列名等内容,但也包括大部分 DDL。在这种情况下,它不期望也无法处理参数。

    检查这个;只需在 SSMS 中运行它,提前声明变量并赋予它们值。你会发现错误信息是一样的。如果它在 SSMS 中不起作用,则不太可能在 ADO.NET 中起作用。

    【讨论】:

    • 那么我该如何创建查询呢?只是从字符串构建它?
    • @Alecu 我要问的第一件事是为什么您希望应用程序代码这样做?这似乎非常不规则。但基本上,是的。您可以使用方括号来避免一些转义问题(例如[Foo.Database]),但最终您还需要对这些值进行一些完整性检查:不允许任意用户输入。另外:这表明您的应用程序代码正在以 dbo 身份运行......这是有风险的。
    • 我需要这个来进行配置。我有必须处理数据库配置的 Web 服务。
    • @Alecu 那么是的,你必须通过连接来做到这一点。重新提升到特定用户 - 您可能有一个带有 EXECUTE AS 的 proc,它接受参数,构建最终的 TSQL 字符串,并调用 EXEC - 这可能会避免让您的应用程序代码运行 evevated - 但取决于您。
    • @Alecu - 如果这是用于配置,使用SMO 会不会更好,它提供了丰富的对象模型来管理 SQL Server?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多