我想用SQL Server数据库做MailMerge作为C#中的数据源。可能吗?我搜索了几天没有任何有效的结果。有人可以向我提供任何有效的链接或解释如何实现这一目标吗?请帮助。提前致谢。MailMerge使用SQL服务器数据库
回答
- 它可以连接到一个表或视图,但你需要使用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
- 连接到一个典型的SP是另一个物。 Word用来做这件事的对象有一个错误,即AFAIK没有被修复,也没有很好的解决方法。对于一些细节,我所知道的唯一的建议,请参阅
http://social.msdn.microsoft.com/Forums/en-US/worddev/thread/272cf1a8-ea98-49a9-b05f-82cfec497a6a
谢谢你bibadiak你的宝贵答复。像上面提到的那样,我收到了错误“Record 1 Contained too few datafields”。我遵循了你给我的文章中提到的步骤,并且我在SQLStatement中使用了完整的数据库模式。但是现在我收到错误“由于安全/密码问题,Office无法打开您的文件,请检查您的密码是否正确”。我已经给出了正确的密码。 – JosephJCKochi
1.在SQL Server 2000之后,我认为我没有得到任何不使用集成安全性的连接。我从来没有发现问题出在哪里,对不起。 2.你的连接字符串是什么? 3.如果你有Excel,值得尝试从Excel连接(这通常比较好)。如果可以的话,我们必须假设Word有问题。 – 2012-08-24 08:11:24
问题是我没有得到数据源中的任何字段。我唯一得到的是M_和M_1。 – JosephJCKochi
我知道这是旧的,但我挣扎着试图找出的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;
}
}
- 1. Sql数据库服务器
- 2. ASP.NET/SQL服务器:SQL Server数据库
- 3. 更改服务器的SQL数据库
- 4. 数据库引擎... SQL服务器2005
- 5. SQL服务器数据库部署
- 6. SQL服务器:从所有数据库
- 7. jQuery与SQL服务器数据库html
- 8. SQL服务器:通过主数据库
- 9. Sql服务器数据库同步
- 10. Advantage数据库或SQL服务器
- 11. SQL服务器数据库备份
- 12. SQL服务器数据库表性能
- 13. SQL服务器登录错误远程服务器数据库
- 14. 服务器数据库使用情况
- 15. 如何使用服务器数据库?
- 16. php-mssql服务器数据库连接使用wamp服务器
- 17. 将SQLite数据库表发送到SQL服务器数据库
- 18. SQL服务器脚本错误:数据库已在使用
- 19. Grails使用遗留数据库SQL服务器
- 20. 图像存储在SQL服务器数据库使用java
- 21. 使用批量导入SQL服务器数据库
- 22. 使用SMO检索SQL服务器,数据库,表信息
- 23. 使用BCP命令与SQL服务器本地数据库
- 24. 在Sybase Advantage数据库服务器中使用SQL Server Analysis Services
- 25. 使用SSIS将Access数据库传输到SQL服务器
- 26. 使用SQL服务器数据库的ASP网站的攻击
- 27. Rails使用MS SQL服务器数据库
- 28. 使用.bak复制SQL服务器数据库
- 29. 使用Get Servers请求列出SQL数据库服务器+ Restful服务
- 30. 用不同的服务器/数据库执行SQL任务
邮件合并什么? MS词? –
是的。我必须合并从SQL服务器存储过程返回的数据到MS字 – JosephJCKochi
我已经尝试过的是微软链接 http://support.microsoft.com/?kbid=301659。当我尝试在CreateDataSource方法中给出连接字符串时,它会引发命令失败错误 – JosephJCKochi