2

次のようにデータベースにクエリを実行する文字列をコンパイルしました。

stringCompiler = "SELECT * FROM SomeTable";

問題は、一部の列の名前にスペースが含まれていることです (つまり、「City Tag Number」)。

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

DBエンジンに渡される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 に答える