想把 Microsoft.Office.Interop.Word 命名空间下的 Document 接口实例化以后存入数据库,因为每个word文档其实对应了一个被实例化了的Document接口(似乎只公开了接口,没有公开用来实例化接口的类)。只要能把实例化的Document接口数据存入数据库,就相当于是把一份word文档存入数据库了。但是我用 byte[] bArray=(byte[])(object)document;这样转换时却会报错。无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“System.Byte[]”。表示 COM 组件的类型实例不能强制转换为不表示 COM 组件的类型;不过,只要基础 COM 组件支持对接口 IID 的 QueryInterface 调用,就能将这些实例强制转换为接口。怎么解决?

解决方案 »

  1.   

    你用string转换再转成二进制 试试
      

  2.   

    那为什么不采取直接将文件读成byte[],转换成stream,再传递给SqlCommand作为varbinary类型的参数呢?
      

  3.   

    上面打错,读成byte[]这样的Stream
      

  4.   

    想了想,不管你在程序这头怎么做,对于数据库,Word的存储最终都是以varbinary的形式进行的。而在程序那头,你提到的那些接口,似乎并不是象Bitmap那样在内存的一个实例化,只是提供一个访问Word中各种对象的接口。这些接口会否建立一个Word文档的完整内存镜像,个人认为不会。因为VS的Office组件,提供的是把Document拆解成若干对象的操作,而不是一个平面的内存镜像。基于上述理由,使用Stream与varbinary的配合,实现Word文档在数据库的存取,应该是顺理成章。偏颇之处,还请见谅。