0

最初に私はこれを試しました:

    string set = "";
    for (int i = 1; i < result.Count; i++)
    {
        if ((fieldtypes[i] == "System.Int32"))
        {
            set += fields[i] + "=" + result[i] + ", ";
        }
        else if (fieldtypes[i] == "System.String")
        {
            set += fields[i] + "='" + result[i] + "', ";
        }
        else if (fieldtypes[i] == "System.Boolean")
        {
            set += fields[i] + "=" + result[i] + ", ";
        }
        else if (fieldtypes[i] == "System.DateTime")
        {
            set += fields[i] + "='#" + System.DateTime.Now + "#', ";
        }
    }
    set = set.Substring(0, set.Length - 2);
    string sql11 = "UPDATE [Contacts] SET " + set + " WHERE pkContactID=" + cKey;
    OleDbCommand myCommand11 = new OleDbCommand(sql11, myConnection);
    myCommand11.ExecuteNonQuery();

文字列と日時の条件を省略して、intとブール値のみを更新すると、これが機能しました。そのため、型が文字列のフィールドを更新しようとすると、構文エラーと関係があります。


次に、.mdb ファイルに書き込むときにパラメーターを使用する必要があると聞いたので、これを試しました。

        string sql11 = "UPDATE [Contacts] SET ";
        for (int i = 1; i < result.Count; i++)
        {
            sql11 += fields[i] + " = ?, ";
        }
        sql11 = sql11.Substring(0, sql11.Length - 2);
        sql11 += " WHERE pkContactID = " + cKey;
        using (myConnection)
        {
            using (OleDbCommand myCommand11 = new OleDbCommand(sql11, myConnection))
            {
                myCommand11.CommandType = CommandType.Text;
                for (int j = 1; j < result.Count; j++)
                {
                    if (fieldtypes[j] == "System.Int32")
                    {
                        myCommand11.Parameters.AddWithValue(fields[j], int.Parse(result[j]));
                    }
                    else if (fieldtypes[j] == "System.String")
                    {
                        myCommand11.Parameters.AddWithValue(fields[j], result[j]);
                    }
                    else if (fieldtypes[j] == "System.Boolean")
                    {
                        myCommand11.Parameters.AddWithValue(fields[j], Boolean.Parse(result[j]));
                    }
                    else if (fieldtypes[j] == "System.DateTime")
                    {
                        myCommand11.Parameters.AddWithValue(fields[j], DateTime.Now);
                    }
                }
                Console.WriteLine(sql11);
                myCommand11.ExecuteNonQuery();
            }
        }
    }

どちらも機能しませんでした。? が適切に置き換えられていないと思います。

とにかく、適切に更新できるように修正を手伝ってください。

4

1 に答える 1

0

構文エラーが発生しやすい Access の UPDATE クエリ文字列をいじる代わりに、DataTable オブジェクトを作成し、UPDATE する行を SELECT しました。次に、変更したい要素の配列を介してテーブルを更新し、アダプターを使用してテーブルを更新してサーバーに戻しました。これは、構文を気にすることなくうまくいきました! :)

乾杯

于 2013-01-23T20:31:32.327 に答える