В SQL-запросе заменяется только один OleDBParemeter.

В настоящее время я работаю над доступом к базе данных с помощью OleDB, и у меня возникла проблема с заменой строки OleDBParameter.

using (OleDbCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "SELECT * FROM " + tablename + " WHERE ID = @ID ;";
    cmd.Parameters.AddWithValue("@ID", testslist.number + "_" + testcase.name + "_" + testcase.config);
    OleDbDataReader reader = cmd.ExecuteReader();
    RecordExists = reader.HasRows;
    reader.Close();

    if (RecordExists)
    {
        string updatestring = null;
        foreach (KeyValuePair<string, string> kv in dictionary)
            updatestring = updatestring + kv.Key + " = '@val" + kv.Key + "',";
        cmd.CommandText = "UPDATE " + tablename + " SET " + updatestring.Remove(updatestring.Length - 1) + " WHERE ID = @ID;";

        foreach(KeyValuePair<string,string> kv in dictionary)
        {
            if (kv.Value == null)
                cmd.Parameters.AddWithValue("@val" + kv.Key, DBNull.Value);
            else
                cmd.Parameters.AddWithValue("@val" + kv.Key, kv.Value);
        }
        cmd.ExecuteNonQuery();
    }
    else
    {
        string insertstring = "ID,";
        string valuestring = "@ID,";

        foreach(KeyValuePair<string,string>kv in dictionary)
        {
            insertstring = insertstring + kv.Key + ",";
            valuestring = valuestring + "@var" + kv.Key + ",";
           // valuestring = valuestring + "'"+ kv.Value+ "',";
        }
        cmd.CommandText = "INSERT INTO " + tablename + " (" + insertstring.Remove(insertstring.Length - 1) + ") VALUES(" + valuestring.Remove(valuestring.Length - 1) + ");";
        foreach (KeyValuePair<string, string> kv in dictionary)
        {
            if (kv.Value == null)
                cmd.Parameters.AddWithValue("@val" + kv.Key, DBNull.Value);
            else
                cmd.Parameters.AddWithValue("@val" + kv.Key, kv.Value);
        }
        cmd.ExecuteNonQuery();
}   

По какой-то причине в моей базе данных корректно заменяется только @ID. После выполнения кода идентификатор заменяется в моей базе данных корректно, но все остальные значения полей - @var[nameofthekey] (например, @varTestCase) . Я действительно не знаю, где искать, тем более что один параметр корректно заменяется в базе данных, а другой нет.

Спасибо за помощь!

редактировать: я забыл упомянуть, я работаю с базой данных доступа (accdb)

0 ответов

Другие вопросы по тегам