-3
string sqlQueryString = " SELECT g.code AS GoodCode, g.name AS GoodName, " +
"msr.name AS MsrName, sm.min_quan AS KolMin, sm.max_quan AS KolMax, " +
"sm.quan AS KolNal, ord.prc AS EdPrice, s.name AS Sklad, m.name AS Mol, " +
"k.code AS KodDost, k.name AS NameDost " +
"FROM N_GOODS_{0} AS g INNER JOIN " +
"G_SMGS_{0} AS sm ON g.id = sm.good_id INNER JOIN " +
"N_KNTRS_{0} AS k ON g.id = k.id INNER JOIN " +
"N_PRC_LISTS_{0} AS pr ON g.id = pr.id INNER JOIN " +
"G_ORDD_{0} AS ord ON sm.smg_id = ord.smg_id INNER JOIN " +
"N_MOLS_{0} AS m ON sm.mol_id = m.id INNER JOIN " +
"N_STORS_{0} AS s ON sm.stor_id = s.id INNER JOIN " +
"N_MSRS_{0} AS msr ON g.id = m.id";
sqlQueryString = String.Format(sqlQueryString, dbLink.CurrentFirm.Id);

return " ( " + sqlQueryString + " ) AS t";

これは、C# コードで実行しようとしている SQL クエリの文字列です。しかし、私はそれを機能させようとして一日を失いました。これは私が得るエラーです:

キーワード「FROM」付近の構文が正しくありません。
キーワード「AS」付近の構文が正しくありません。
4

3 に答える 3

5

試す:

return "SELECT * FROM ( " + sqlQueryString + " ) AS t";

returnさらに、ステートメントにブレークポイントを設定してみてください。そこの値を取得しsqlQueryString、SQL Server Management Studio で直接実行してみてください。

于 2012-08-17T11:57:50.247 に答える
3

まず、これはおそらく C# に関する質問ではなく、...

string strSql = @"SELECT * 
                   FROM TABLE";

1.) すべての" +ものを取り除くことができ、2.) isql クライアントから何かを切り取って貼り付けることができます。

では、あなたが本当にやりたいことは...

  1. その最後の行にブレークポイントを設定して、IDE でデバッグします。
  2. にカーソルを合わせるとsqlQueryString
  3. sqlQueryString表示される「フローター」を右クリックします(マウスを の上に置くstrReturnと、フローターが表示されます。上に表示されるフローターを右クリックしますstrReturn-青い長方形が必要です)

var の Visual Studio からの floater

  1. をコピーするオプションを選択します。
  2. の内容を含むクリップボードをsqlQueryStringメモ帳、gvim などに貼り付けます。
  3. それが何を言っているのか教えてください。
  4. 次に、そのステートメントをデータベースに対して直接実行するとどうなるかを正確に教えてください。

また、[おそらく以前にデータベースに対して元のクエリを実行したことに基づいて]、何が起こると予想したかについてのアイデアを教えてください。

そして、最高の私たちでさえ、SQL でばかげたことをして 1 時間か 2 時間を失うことがあることを受け入れます。;^) ただし、上記の情報があれば、おそらくそれを少し減らすことができます。

編集: むしろ、あなたのコメントが示唆するように、(MS-SQL Server?) に対して直接実行したときにクエリが機能する場合、C# の問題は、データベースに対して実行したときに、このコードの後に​​発生する可能性があります。最初に上記を実行し、sqlQueryString の内容がデータベースに対して実行した内容であることを確認します。

EDIT2:デバッグ手順を箇条書きにして、より明確にします。うまくいくと言うだけではありません。何が入っていたか教えてくださいsqlQueryStringただし、最初の編集と同様に、その文字列に問題がなければ、後で C# コードで問題が発生する可能性があります。

データベースに対してすぐに投げていますか?そのコードはどのように見えますか?

于 2012-08-17T12:05:14.403 に答える
1

問題は最後の return ステートメントにあるようです。

( SELECT foo FROM bar ) AS baz; はそれ自体では有効な SQL ステートメントではなく、フラグメントです。

@Yuck が示唆するように、SELECT * FROM ( " + sqlQueryString + " ) AS t";代わりに試してください。

于 2012-08-17T12:12:41.010 に答える