查询数字TableName失败

时间:2015-02-14 20:21:56

标签: c# sql-server

我能够在SQL中查询名为“012012”的表,但是当尝试从C#应用程序查询它时,它会在'012012'附近说出错误的语法。在SQL中我会使用双引号来查询此表,因为它没有它们就无法工作。这是我正在使用的代码:

string query = string.format("SELECT rec FROM '"+012012+"' WHERE cust = 'custname';");

3 个答案:

答案 0 :(得分:3)

如果您正在使用SQL Server,那么它不允许未转义的标识符以数字开头。所以,你必须使用这样的括号[012012]。但是,这只是您问题的一部分。另一部分是你正在尝试使用数字文字,并将其转换为字符串,但这个数字以0开头。默认情况下会被截断,只会变为12012.所以,你最好的选择是这样做:

string query = string.format("SELECT rec FROM [{0:D6}] WHERE cust = 'custname';", 012012);

{0:D6}告诉string.format使十进制字段宽6个字符,如果它更短,则填充0&#(否则它将是5个字符)。

但是,在这种情况下,您可能甚至不需要这样做..除非您确实需要从数字中派生表名,并且您可以这样做:

string query = "SELECT rec FROM [012012] WHERE cust = 'custname';";

我也强烈建议不要开始编写这样的代码,因为它容易出现SQL注入漏洞,你应该总是使用参数化查询和预处理语句。他们的工作更多,但他们更安全。

学习编写这样的SQL代码会形成坏习惯,这在你职业生涯的后期可能非常危险。

答案 1 :(得分:1)

您不能将表名称设为'012012'。在您的情况下甚至不使用string.Format。这将毫无用处。

如果您想在表名中使用string.Format,可以这样做;

string query = string.format("SELECT rec FROM [{0}] WHERE cust = 'custname';", "012012");

答案 2 :(得分:0)

尝试使用方括号:

string query = string.format("SELECT rec FROM ["+012012+"] WHERE cust = 'custname';");

如果在列名或标识符中使用关键字或特殊字符,则需要括号。