Я пытаюсь удалить столбцы, которые существуют во ВСЕХ наших таблиц, перед добавлением или обновлением записи в таблице.Это необходимо из-за некоторых функций Azure и синхронизации таблиц на мобильных устройствах.В приведенном ниже примере я удаляю с именем «Col4».
Ниже приведен мой лучший подход.Он выполняет простую замену строки после очистки команды SQL с помощью SqlCommandBuilder
(см. Пример этого очищенного SQL ниже кода).После удаления столбца с заменой строки я заменяю текст команды в SqlCommandBuilder
.Я надеялся использовать построитель строк как способ удаления столбца, поскольку формат должен быть согласованным по сравнению с параметром commandText
, который может немного отличаться.Но я боюсь, что этот подход чреват проблемами, например, мне, возможно, потребуется также изменить часть VALUES в обновленной команде SQL, но это может быть сложно, так как я имею дело с разными таблицами с различным количеством столбцов.,В любом случае, как вы можете видеть, я получаю сообщение об ошибке, указанное в коде.
Существует ли более простой способ удаления столбцов перед командой da.InsertCommand = \ без указанных значений
public bool UpdateTest(DataTable dt, string commandText)
{
bool success = false;
SqlDataAdapter da = null;
SqlCommand command = null;
SqlCommandBuilder cb = null;
try
{
lock ((_Lock))
{
using (SqlConnection connX = new SqlConnection(_ConnectionString))
{
connX.Open();
command = new SqlCommand();
command.CommandType = CommandType.Text;
command.CommandText = commandText;
command.Connection = connX;
da = new SqlDataAdapter();
da.SelectCommand = command;
// This section is where I try to remove the column
SqlCommandBuilder testcb = new SqlCommandBuilder(da);
string testSQL = testcb.GetInsertCommand.CommandText;
testSQL = testSQL.Replace(", [Col4]", string.Empty);
da.SelectCommand.CommandText = testSQL;
cb = new SqlCommandBuilder(da);
da.InsertCommand = cb.GetInsertCommand; //Code fails here--not surprising
da.DeleteCommand = cb.GetDeleteCommand;
da.UpdateCommand = cb.GetUpdateCommand;
da.Update(dt.GetChanges);
success = true;
}
}
}
catch (Exception ex)
{
}
finally
{
dt = null;
if (!command == null)
{
command.Dispose();
command = null;
}
if (!(da == null))
{
da.Dispose();
da = null;
}
}
return success;
}
Оригинал da.SelectCommand.CommandText
:
"INSERT INTO [Table] ([Col1], [Col2], [Col3], [Col4]) VALUES (@p1, @p2, @p3, @p4)"
Обновлен da.SelectCommand.CommandText
:
"INSERT INTO [Table] ([Col1], [Col2], [Col3]) VALUES (@p1, @p2, @p3, @p4)"