【问题标题】:SQL Command with string as Tablename以字符串为表名的 SQL 命令
【发布时间】:2017-01-13 07:41:47
【问题描述】:
private DataTable zGetTableContent(string tablename)
{
        DataTable dt = new DataTable();
        Connection.Open();

        MessageBox.Show(tablename);

        Adapter = new OleDbDataAdapter("SELECT * FROM '%" + tablename + "%'", Connection);
        Adapter.Fill(dt);

        Connection.Close();
        return dt;
}

试图让上面的代码正常工作,但遇到了困难。我想我对字符串做错了。但不知道是什么。

字符串完美地传递给方法。 MessageBox 显示正确的字符串。但我的适配器说

查询中的语法错误。查询子句不完整

如果我自己输入表名,一切正常。

编辑:

连接的数据库(Access):

    static private OleDbConnection Connection = new OleDbConnection();

    private void zPrepConnect(string SourceFile)
    {
        Connection.ConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source = {0};", SourceFile);
        Command.Connection = Connection;
    }   

编辑#2: 表名如下:

  • rstw
  • simis 是
  • simis w
  • simis c

编辑#3: 从表名中删除了空格,但仍然无法正常工作:

  • rstw
  • simis_is
  • simis_w
  • simis_c

【问题讨论】:

  • 你要查询什么数据库?
  • tablename的值是多少?这就是错误所在。
  • "SELECT * FROM " + tablename + "怎么样

标签: c# sql wpf


【解决方案1】:

您不需要在查询中使用 ' 或 % 符号,只需使用名称即可:

  Adapter = new OleDbDataAdapter("SELECT * FROM [" + tablename + "]", Connection);

检查msdn 以确定语法。

【讨论】:

  • 感谢您的回答,但我已经尝试过了。计算机说不;-) 我收到“FROM 子句中的语法错误”。
  • 你的表名是什么?它是某种 SQL 保留的名称吗?喜欢用户?然后只需使用 [TableName] 语法,但您仍然不需要 % 或 ' 符号,这将 100% 导致错误。
  • 问题是你的表名有空格,用[Table Name]语法就行了
  • 但是当我选择“rstw”并且里面没有空格时也会出现错误。
  • 什么错误?请添加一个堆栈跟踪。查询:“SELECT * FROM [rstw]”完全合法。
【解决方案2】:

你也可以使用string.Format:

string query = string.Format ("select * from \"{0}\" ", TableName);

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多