2012-08-22 93 views
1

我想用SQL Server数据库做MailMerge作为C#中的数据源。可能吗?我搜索了几天没有任何有效的结果。有人可以向我提供任何有效的链接或解释如何实现这一目标吗?请帮助。提前致谢。MailMerge使用SQL服务器数据库

+0

邮件合并什么? MS词? –

+0

是的。我必须合并从SQL服务器存储过程返回的数据到MS字 – JosephJCKochi

+0

我已经尝试过的是微软链接 http://support.microsoft.com/?kbid=301659。当我尝试在CreateDataSource方法中给出连接字符串时,它会引发命令失败错误 – JosephJCKochi

回答

0
  1. 它可以连接到一个表或视图,但你需要使用OpenDataSource(没有的createDataSource),提供合适的.odc路径/文件名(你在Word中手动创建)作为名称参数,以及SQLStatement中合适的SQL查询。这给你一个OLE DB连接。您可以连接vie ODBC,但通信链中的某些内容不会正确执行Unicode内容,这意味着不会返回NVARCHAR和其他“N”类型。只要您提供所有连接信息,就可以使用空的.odc。您需要在通话中,例如(在VBA)

ActiveDocument.MailMerge.OpenDataSource _

Name:="c:\myodcs\empty.odc", _ 
Connection:="Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _ 
"Persist Security Info=False;Initial Catalog=mydb;Data Source=myserver;" _ 
SQLSatatement:="SELECT * FROM [mytable]", _ 
SubType:=wdMergeSubTypeOther 

其中 “MYSERVER” 是运行SQL Server数据库的服务器的名称, “mydb的” 是数据库的名称你想要访问并且“mytable”是要从中检索数据的表或视图 。

使用旧的SQL Server客户端。您至少需要将提供者名称更改为使用新名称。

您可能会或可能不会有资格与数据库/目录名表名,你可能要考虑下面的文章中:

http://support.microsoft.com/kb/918295

  1. 连接到一个典型的SP是另一个物。 Word用来做这件事的对象有一个错误,即AFAIK没有被修复,也没有很好的解决方法。对于一些细节,我所知道的唯一的建议,请参阅

http://social.msdn.microsoft.com/Forums/en-US/worddev/thread/272cf1a8-ea98-49a9-b05f-82cfec497a6a

+0

谢谢你bibadiak你的宝贵答复。像上面提到的那样,我收到了错误“Record 1 Contained too few datafields”。我遵循了你给我的文章中提到的步骤,并且我在SQLStatement中使用了完整的数据库模式。但是现在我收到错误“由于安全/密码问题,Office无法打开您的文件,请检查您的密码是否正确”。我已经给出了正确的密码。 – JosephJCKochi

+0

1.在SQL Server 2000之后,我认为我没有得到任何不使用集成安全性的连接。我从来没有发现问题出在哪里,对不起。 2.你的连接字符串是什么? 3.如果你有Excel,值得尝试从Excel连接(这通常比较好)。如果可以的话,我们必须假设Word有问题。 – 2012-08-24 08:11:24

+0

问题是我没有得到数据源中的任何字段。我唯一得到的是M_和M_1。 – JosephJCKochi

0

我知道这是旧的,但我挣扎着试图找出的Word 2013和新的解决方案。我想出了使用参数来过滤数据。在Microsoft Word中使用.odc连接(Office Data Connection)比旧的传递参数方法更容易。

第1步:创建一个Word表单以备后用。在Microsoft Word 2013或更高版本中,单击邮件功能区选项卡,然后下拉选择收件人并选择使用现有连接,然后选择现有的odc文件或单击新建源。如果您正在设置一个新源,请按照向导进行操作。使用“插入合并字段”将数据字段添加到文档中,创建字母,表单,标签...。完成后保存文档。如果可能的话使用集成安全。请注意,它们通常存储在C:\ Users \\ Documents \ My Data Sources中。

在我的情况下,我有一个视图(vAppointment)的字段AppointmentID,FirstName和LastName。在文档中,我将字段添加到word文档中以验证它是否有效。如果我生成邮件合并,它将填充所有数据。

第2步:在C#项目中,连接以下函数并更改word文档和odc文件的路径。您还需要更新QueryString以反映您的数据:

public void RunMailMerge() 
    { 
     try 
     { 
      object isTrue = true; 
      object notTrue = false; 

      Microsoft.Office.Interop.Word.Document wordDoc = new Microsoft.Office.Interop.Word.Document(); 
      Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); 
      string filename = @"C:\<path>\<the file you created>.docx"; 
      wordDoc = wordApp.Documents.Add(Template: filename); 
      wordApp.Visible = true; 

      object format = Microsoft.Office.Interop.Word.WdOpenFormat.wdOpenFormatAuto; 

      wordDoc.MailMerge.OpenDataSource(@"C:\Users\<username>\Documents\My Data Sources\<your connection file>.odc", 
         ref format, 
         ref notTrue, // ConfirmConversion 
         ref isTrue  // Set as ReadOnly so the user can't overwrite the document 
        ); 
      // Check the QueryString to see what is already there, add your parameters as needed. In my case I added "WHERE AppointmentID = 4" 
      wordDoc.MailMerge.DataSource.QueryString = "SELECT * FROM \"vAppointment\" WHERE AppointmentID = 4"; 
      wordDoc.MailMerge.Execute(ref notTrue); 
     } 
     catch (Exception ex) 
     { 
      string t = ex.Message; 
      string s = ex.StackTrace; 
      string msg = t + Environment.NewLine + s; 
     } 
    }