3

私はプログラミングの初心者ですが、ここで何を間違えたのか疑問に思っていました。誰かが私を助けてくれますか?

2つのデータベースを同期するコンソールアプリを作成していますが、データをテーブルに挿入しようとすると、この例外がスローされます。コードは次のとおりです。

public static void AddInterationPath(SqlConnection conDS_ReleaseCri, DataRow dr)
{
    SqlCommand insertNewAreaPath = new SqlCommand("INSERT INTO InterationPath (ID,NodePath) VALUES(" + dr[0].ToString() + ",'" + dr[2].ToString() + "')", conDS_ReleaseCriterions);
    insertNewAreaPath.ExecuteNonQuery();
}

public static void AddAreaPath(SqlConnection conDS_ReleaseCri, DataRow dr)
{
    SqlCommand insertNewAreaPath = new SqlCommand("INSERT INTO AreaPath (ID,NodePath) VALUES(" + dr[0].ToString() + ",'" + dr[2].ToString() + "')", conDS_ReleaseCriterions);
    insertNewAreaPath.ExecuteNonQuery();
}

そして、次の例外が発生します。

's'の近くの構文が正しくありません。文字列')'の後の閉じられていない引用符

4

2 に答える 2

10

挿入するデータには、単一引用符などの特殊文字が含まれている可能性があります。パラメーター化されたクエリに変更して、値が適切にエスケープされるようにします。良い例と説明はhttp://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.htmlです。

[編集: 例を追加しました。]

たとえば、最初の関数の内容を次のように置き換えます。

SqlCommand insertNewAreaPath = new SqlCommand(
    "INSERT INTO InterationPath (ID, NodePath) VALUES(@ID, @NodePath)",     
    conDS_ReleaseCriterions);
insertNewAreaPath.Parameters.Add("@ID", dr[0]);
insertNewAreaPath.Parameters.Add("@NodePath", dr[2]);
insertNewAreaPath.ExecuteNonQuery();
于 2012-09-03T08:47:07.343 に答える
0

文字列の値の中に「'」がある場合、そのタイプのエラーが発生しているため、文字列から「'」を削除してからクエリを実行します。

于 2012-09-03T08:47:59.403 に答える