diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge.sln b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge.sln new file mode 100644 index 00000000..614bff58 --- /dev/null +++ b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.37301.10 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Convert_Database_into_Dataset_and_Perform_Mailmerge", "Convert_Database_into_Dataset_and_Perform_Mailmerge\Convert_Database_into_Dataset_and_Perform_Mailmerge.csproj", "{F466E5AF-87B2-BED0-A680-8B3305676943}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F466E5AF-87B2-BED0-A680-8B3305676943}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F466E5AF-87B2-BED0-A680-8B3305676943}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F466E5AF-87B2-BED0-A680-8B3305676943}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F466E5AF-87B2-BED0-A680-8B3305676943}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3CD5B0D7-D2A2-4D43-8C8D-3239CD3DE50D} + EndGlobalSection +EndGlobal diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Convert_Database_into_Dataset_and_Perform_Mailmerge.csproj b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Convert_Database_into_Dataset_and_Perform_Mailmerge.csproj new file mode 100644 index 00000000..d9af2aed --- /dev/null +++ b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Convert_Database_into_Dataset_and_Perform_Mailmerge.csproj @@ -0,0 +1,25 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + Always + + + + Always + + + + diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/EmployeeDetails.mdb b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/EmployeeDetails.mdb new file mode 100644 index 00000000..2021a84f Binary files /dev/null and b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/EmployeeDetails.mdb differ diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/Template.docx b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/Template.docx new file mode 100644 index 00000000..f47eaba6 Binary files /dev/null and b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Data/Template.docx differ diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/Result.docx b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/Result.docx new file mode 100644 index 00000000..280c8ee5 Binary files /dev/null and b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/Result.docx differ diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/gitkeep.txt b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/gitkeep.txt new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Output/gitkeep.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Program.cs b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Program.cs new file mode 100644 index 00000000..e6aa31a8 --- /dev/null +++ b/Mail-Merge/Convert_Database_into_Dataset_and_Perform_Mailmerge/.NET/Convert_Database_into_Dataset_and_Perform_Mailmerge/Program.cs @@ -0,0 +1,80 @@ +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System.Collections; +using System.Data; +using System.Data.OleDb; + +namespace Convert_Database_into_Dataset_and_Perform_Mailmerge +{ + class Program + { + static void Main(string[] args) + { + // Load the word document + using (FileStream sourceStreamPath = new FileStream(Path.GetFullPath(@"../../../Data/Template.docx"), FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + //Creating a new document. + using (WordDocument document = new WordDocument(sourceStreamPath, FormatType.Docx)) + { + + string dataBase = Path.GetFullPath(@"../../../Data/EmployeeDetails.mdb"); + + // Get all data + DataSet ds = GetAllTables(dataBase); + //ArrayList contains the list of commands + ArrayList commands = GetCommands(); + //Executes the mail merge + document.MailMerge.ExecuteNestedGroup(ds, commands); + //Saves the Word document to MemoryStream. + using (FileStream outputStream = new FileStream(Path.GetFullPath(@"../../../Output/Result.docx"), FileMode.Create, FileAccess.ReadWrite)) + { + document.Save(outputStream, FormatType.Docx); + } + } + } + } + + /// + /// Get the commands to execute with database. + /// + static ArrayList GetCommands() + { + //ArrayList contains the list of commands + ArrayList commands = new ArrayList(); + + // Parent table: Employees (no filter, so empty string) + commands.Add(new DictionaryEntry("Employees", "")); + + // Customers filtered by EmployeeID + commands.Add(new DictionaryEntry("Customers", "EmployeeID = %Employees.EmployeeID%")); + + // Orders filtered by CustomerID + commands.Add(new DictionaryEntry("Orders", "CustomerID = %Customers.CustomerID%")); + + return commands; + } + //Retrieves all required tables from the MDB database and prepares hierarchy commands for DocIO mail merge. + static DataSet GetAllTables(string dataBase) + { + // Connection string using ACE OLEDB provider (64-bit compatible) + string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={dataBase};Persist Security Info=False;"; + // DataSet to hold all tables + DataSet ds = new DataSet(); + + using (OleDbConnection conn = new OleDbConnection(connectionString)) + { + conn.Open(); + // Tables to fetch from MDB + string[] tables = { "Employees", "Customers", "Orders" }; + // Loop through each table and fill DataSet + foreach (string tableName in tables) + { + string sqlQuery = $"SELECT * FROM {tableName}"; + OleDbDataAdapter adapter = new OleDbDataAdapter(sqlQuery, conn); + adapter.Fill(ds, tableName); + } + } + return ds; + } + } +}