【问题标题】:Unable to name table dynamically at creation - c#, sqlite无法在创建时动态命名表 - c#, sqlite
【发布时间】:2018-12-26 18:55:21
【问题描述】:

使用 System.Data.SQLite 命名空间中可用的内容并使用 C# 我正在执行数据库操作。但是,有一个问题我似乎无法弄清楚。

如果我想创建一个在创建时动态命名的表,我认为这样做的方法是......

command.CommandText = @"CREATE TABLE IF NOT EXISTS @tableName( ... )";

然后执行此操作...

command.Parameters.AddWithValue("@tableName", tableName);

然后做

command.ExecuteNonQuery();

但是发生的事情是我得到了一个名为“@tableName”的新表,而不是变量 tableName 设置的任何值。

我怎样才能让它正常工作?

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/23357481/… 你可以在那里找到答案
  • 这确实得出了与我最终得出的相同结论 - 使用字符串连接,我发现您可以对语句使用字符串连接,但对于值,您必须使用 Parameters.AddWithValue。那是我的主要收获,我认为这将帮助未来最终来到这里的人们。无论如何,是的,同样的问题,同样的解决方案。另一个答案有点复杂。

标签: c# sqlite


【解决方案1】:

我处理此类问题的方法是尽可能简化。在这种情况下,简单的字符串替换应该可以轻松解决您的问题,而无需使用参数。

例如:

        command.Text = $@"CREATE TABLE IF NOT EXISTS {tableName}( ... )";

        command.Text = string.Format(@"CREATE TABLE IF NOT EXISTS {0}( ... )", tableName);

【讨论】:

  • 原来我应该像对待任何其他字符串一样对待它。 CommandText = @"CREATE TABLE IF NOT EXISTS" + tableName + "( ..."。就是这样。难以置信的简单。感谢您的回答触发了这一点。
【解决方案2】:

您可以创建过程而不是内联查询吗?您可以像这样在存储过程中轻松管理。`CREATE PROCEDURE Dynamic_SP

  @Table_Name sysname AS BEGIN

  SET NOCOUNT ON;

  DECLARE @DynamicSQL nvarchar(4000)

  SET @DynamicSQL = N'SELECT * FROM ' + @Table_Name

  EXECUTE sp_executesql @DynamicSQL END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2021-09-19
    • 2016-12-04
    • 2020-06-04
    • 2018-10-05
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多