2

我编译了一个查询数据库的字符串,如下所示:

stringCompiler = "SELECT * FROM SomeTable";

问题是某些列的名称中有空格(即“城市标签号”)。

使用 db.Query 语句后如何调用它。例子:

foreach(var row in db.Query(stringCompiler))
{
    var someVariable = row.Column With Spaces;
}

显然上面的代码会产生错误。

我可以遍历每一列而不是使用“*”,同时为所有带有空格的列名分配别名。例子:

stringCompiler = "SELECT \"City Tag Number\" AS CityTagNumber, ...";

但是这个表中有很多列名,我假设有更好的方法,我就是找不到它(我保证,我已经看过了)。

任何帮助深表感谢。

- - - - - - - - 编辑 - - - - - - - - - - - -

我应该指定我使用的是 SqlServer。

4

2 回答 2

3

在传递给数据库引擎的 sql 文本中,通常(但它取决于实际的数据库)您使用方括号(SqlServer、Access)或反引号(mysql)

 stringCompiler = "SELECT [City Tag Number] AS CityTagNumber, ...";

 stringCompiler = "SELECT `City Tag Number` AS CityTagNumber, ...";

在代码中(假设行是 DataRow),您使用列的名称作为字符串

foreach(var row in db.Query(stringCompiler))
{
    var someVariable = row["City Tag Number"].ToString();
}
于 2012-12-20T19:39:53.773 回答
2

尽管@Steve 的回答是一个很好的答案,但这里有一个建议可能会让你的生活更轻松一些。进入 SQL Server 并在感兴趣的表中定义一个视图:

SELECT [City Tag Number] AS CityTagNumber, [Second Field Name] AS SecondFieldName...
FROM  YourTable

然后在您的代码中,使用视图而不是直接引用表。这样,您只需执行一次,这将使您的代码更具可读性和更短,因为在代码中您不需要所有的 AS 别名。该视图的工作方式与您直接前往餐桌完全一样。我使用这种技术,如果表名是 YourTable,我将视图称为 vYourTable。

于 2012-12-21T21:34:23.617 回答