2010-12-29 9 views
3

私はこのコードがC#で動作しない理由と解決方法を理解しようとしています。文字列の構成はC#

string first = "hello"; 
string second = "look at" + first + "me"; 

お勧めはありますか?

編集: 申し訳ありませんが、私が作っていた間違いは単純な初心者のエラーだと思いました。私はそれがもっとあると思う。 これは私の実際のコードです:

string toolOp = lstToolOpen.SelectedValue.ToString(); 
string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) values (" + 
      + toolOp + ", " + cmbFacet.SelectedValue +" ) "; 

私が手にエラーがある:演算子+はタイプ「文字列」のオペランドに適用することはできません。 3行目のコードにtoolOpの下に赤い線があります。

+11

何が問題なのですか?期待される結果は何ですか? –

+4

どのように動作しないのか、あなたは何を期待しているのかを説明してください。二番目は "look athellome"になります。スペースを追加する必要がありますか? – fejesjoco

+1

それは私によく見えます。ビジュアルスタジオにどんなエラーがありますか? – Jonathan

答えて

15

の前に2つの+があります。それは次のようにする必要があります。

string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) values (" + 
     toolOp + ", " + cmbFacet.SelectedValue +" ) "; 

これは、私はあなたがパラメータ化されたクエリを使用することをお勧めします。

string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) VALUES (@esfa_facet, @esfa_tool)"; 
sqlCommand.Parameters.AddWithValue("@esfa_facet", toolOp); 
sqlCommand.Parameters.AddWithValue("@esfa_tool", cmbFacet.SelectedValue); 

は今、あなたはSQLインジェクションに対して安全である:あなたは間違ってそれをやっているSQLクエリを構築するときに、あなたが+演算子を使用することを毎回覚えておいてください。

結論:never+をSQLクエリで使用してください。

+0

データが信頼できるソースから送られていない限り、そして、それをしないでください。 – cdhowie

+1

+1パラメータ化されたクエリを使用する場合。文字列SQLでの連結は常に例外ではありません。 –

+0

@cdhowie、信頼できるソースからのデータであっても、 '+'は使わないでください。ソースが信頼されていても、データはクエリに対して適切にエンコードされません。 –