I am currently working on accessing a database using OleDB and I am having issue with string replacement of 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();
}
For whatever reason, only the @ID is getting replaced correctly in my database. After running the code, the ID is replaced correctly in my database, but every other field values are @var[nameofthekey] (@varTestCase for example) . I really don't know where to look anymore especially since one the parameter gets replaced properly in the database, but not the other.
Thank you for your help!
edit: I forgot to mention, I am working with an access database (accdb)