This function creates a new block table record in the database executing this function. This new block table record is given the name pointed to by destinationBlockName. Then, each entity in the block table record whose name is sourceBlockName and which resides in the database pointed to by dataBase is copied into the new block table record.
</QUOTE>
That means, not only a new block definition with "destinationBlockName" is created from the inserted block file, all entities in an existing block definition names as sourceBlockName" would also copied to the newly created block definition (i.e. you get a new block definition with 2 sets of entities combined). I really do not see why someone wants to do things in this odd way by code.
If your purpose is to update/redefine an existing block from a block DWG file, you simply use the overloaded Insert(string, database, bool). If the passed block name already exists, this method simply redefine the block with inserted block file; if not, a new block definition is created.
Even you does intentionally use Insert(string, string, database, bool) with fully understanding what it does, your code is still problematic: you use full file path as the block name (variable ConnName, which, I suppose, should be a fully pathed file name, because you used it in ReadDwgFile() method). In current database, there could not be a block with that name., not to mention a fully pathed file name contains invalid characteres to be used as symbol name. You should parse the full path into a valid block name, like:
Dim blkName As String = System.IO.Path.GetFileNameWithoutExtension(ConnName)
....Insert(blockName, TXB_BlockName.Text, ...)
Again, in most cases, using Insert(string, Database, bool) is the usual way to force block definition redefine.