我能够在SQL中查询名为“012012”的表,但是当尝试从C#应用程序查询它时,它会在'012012'附近说出错误的语法。在SQL中我会使用双引号来查询此表,因为它没有它们就无法工作。这是我正在使用的代码:
string query = string.format("SELECT rec FROM '"+012012+"' WHERE cust = 'custname';");
答案 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';");
如果在列名或标识符中使用关键字或特殊字符,则需要括号。