修改任何SQL命令字符串以在插入​​或更新数据库之前删除特定的列

时间:2018-10-24 17:48:26

标签: c# sql-server sqlcommand sqlcommandbuilder

在添加或更新表记录之前,我试图删除所有表中存在的列。由于Azure的某些功能以及在移动设备上同步表的缘故,这是必需的。在下面的示例中,我删除了名为“ Col4”的文件。

到目前为止,以下是我最好的方法。在使用SqlCommandBuilder清除SQL命令后,它将执行简单的字符串替换(请参见代码下方的此清除SQL的示例)。用字符串替换删除该列后,然后替换SqlCommandBuilder中的命令文本。我希望使用字符串生成器作为删除列的方法,因为与commandText参数相比,格式应该保持一致,后者可能会有很大差异。但是我担心这种方法会遇到很多问题,例如我可能还需要修改更新的SQL命令中的VALUES部分,但这可能很困难,因为我要处理具有不同列数的不同表。如您所见,无论如何,我在代码中指出的地方出现错误。

有没有一种简单的方法可以删除da.InsertCommand = \ command之前没有指定值的列

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)"

0 个答案:

没有答案