Последовательность System.invalidoperationexception не содержит элементов openxml
Я получаю некоторые ошибки исключения, используя OpenXML для заполнения данных с сервера MSSQL на элементе управления контентом. Я хочу сделать простую прогулку, чтобы данные были заполнены из таблицы в базе данных и напечатаны в документе MS Word, и я использую OpenXML SDK.
Скомпилировав программу и запустив ее, чтобы посмотреть, что произойдет, я получаю эту ошибку исключения : последовательность system.invalidoperationexception не содержит элементов
Мой код выглядит примерно так
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml.Drawing; using System.Data.SqlClient; using System.IO; namespace DesktopSignaturetest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string constring = @"Data Source=DESKTOP-9CM4N5S\SQLEXPRESS;Initial Catalog=SignatureBox2;User ID=sa;Password=123456;"; using (SqlConnection con = new SqlConnection(constring)) { con.Open(); string q = "select * from SignatureBox_DB where StaffID = @StaffID"; using (SqlCommand cmd = new SqlCommand(q, con)) { cmd.Parameters.AddWithValue("@StaffID", textBox1.Text); using (SqlDataReader rd = cmd.ExecuteReader()) { try { if (rd.Read()) { string fileName = @"C:\Users\emi\Desktop\test.jpg"; byte[] imageBytes = Convert.FromBase64String(rd["SignatureBase64"].ToString()); string fullname = rd["FullName"].ToString(); string designation = rd["Designation"].ToString(); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); ms.Write(imageBytes, 0, imageBytes.Length); Image image = Image.FromStream(ms, true, true); image.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\Users\emi\Desktop\MSWordTest.docx", true)) { MainDocumentPart mainPart = doc.MainDocumentPart; SdtBlock block = mainPart.Document.Body.Descendants<SdtBlock>().Where (r => r.SdtProperties.GetFirstChild<Tag>().Val == "Name").Single(); SdtBlock desg = mainPart.Document.Body.Descendants<SdtBlock>().Where (r => r.SdtProperties.GetFirstChild<Tag>().Val == "Designation").Single(); SdtBlock cc = doc.MainDocumentPart.Document.Body.Descendants<SdtBlock>() .FirstOrDefault(c => { SdtProperties p = c.Elements<SdtProperties>().FirstOrDefault(); if (p != null) { // Is it a picture content control? SdtContentPicture pict = p.Elements<SdtContentPicture>().FirstOrDefault(); // Get the alias. SdtAlias a = p.Elements<SdtAlias>().FirstOrDefault(); if (pict != null && a.Val == "Signature") return true; } return false; }); string embed = null; if (cc != null) { Drawing dr = cc.Descendants<Drawing>().FirstOrDefault(); if (dr != null) { Blip blip = dr.Descendants<Blip>().FirstOrDefault(); if (blip != null) embed = blip.Embed; } } if (embed != null) { IdPartPair idpp = doc.MainDocumentPart.Parts .Where(pa => pa.RelationshipId == embed).FirstOrDefault(); if (idpp != null) { DocumentFormat.OpenXml.Drawing.Text name = block.Descendants<DocumentFormat.OpenXml.Drawing.Text>().Single(); DocumentFormat.OpenXml.Drawing.Text desgx = desg.Descendants<DocumentFormat.OpenXml.Drawing.Text>().Single(); name.Text = fullname; desgx.Text = designation; ImagePart ip = (ImagePart)idpp.OpenXmlPart; using (FileStream fileStream = File.Open(fileName, FileMode.Open)) ip.FeedData(fileStream); MessageBox.Show("Done!"); } } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { con.Close(); } } } } } } }
Что я уже пробовал:
Здесь код выдает ошибку исключения
SdtBlock block = mainPart.Document.Body.Descendants<SdtBlock>().Where (r => r.SdtProperties.GetFirstChild<Tag>().Val == "Name").Single();
Пожалуйста, что я не так понимаю?