Я пытаюсь динамически обновлять набор таблиц базы данных. У меня есть две переменные; table_name
и field_name
. Они заполняются циклом foreach
, который проходит через цикл DataTable
. Каждый раз, когда мы попадаем в новую строку в DataTable
, имена меняются соответственно. В этом цикле я создаю новое соединение с Oracle и пытаюсь записать обновление с текущим именем_таблицы/имя_поля. Но Oracle продолжает выдавать мне ошибку в моей команде ExcecuteNonQuery
. Любая помощь приветствуется!
РЕДАКТИРОВАТЬ: я переформатировал, чтобы включить параметры, все еще не работает. У кого-нибудь есть идеи о том, что я делаю неправильно?
foreach (DataRow fieldtable in setofTables.Tables[0].Rows)
{
//do work
table_name = fieldtable["table_name"].ToString().Trim();
field_name = fieldtable["field_name"].ToString().Trim();
MessageBox.Show(table_name + field_name);
//create parameters
OracleParameter fieldParamater = new OracleParameter("field_name", OracleDbType.Varchar2);
OracleParameter diffParameter = new OracleParameter("mark_diff_oracle", OracleDbType.BinaryFloat);
OracleParameter wellIdParameter = new OracleParameter("id", OracleDbType.Char);
//wellIdParameter.Size = 10;
//create oracle connection and open
OracleConnection OrclCon2 = new OracleConnection("Data Source=" + dbname + "; User Id=" + userid + ";Password=" + password1 + ";");
OrclCon2.Open();
//prepare sql to be passed to oracle
string UpdateOraSQL = "UPDATE " +table_name+ " set :field_name = :field_name - (:mark_diff_oracle) where id = ':id' and :field_name is not null;";
MessageBox.Show(UpdateOraSQL);
//create dommand
OracleCommand UpdateDB = new OracleCommand(UpdateOraSQL, OrclCon2);
UpdateDB.CommandType = CommandType.Text;
//add parameters
UpdateDB.Parameters.Clear();
UpdateDB.Prepare();
UpdateDB.Parameters.Add(fieldParamater).Value = field_name;
UpdateDB.Parameters.Add(diffParameter).Value = mark_diff_oracle;
UpdateDB.Parameters.Add(wellIdParameter).Value = id;