Изменение любой строки команды SQL для удаления определенного столбца перед вставкой или обновлением базы данных - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь удалить столбцы, которые существуют во ВСЕХ наших таблиц, перед добавлением или обновлением записи в таблице.Это необходимо из-за некоторых функций 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)"
...