Send serialized data from one datatable to another method

1

I am a beginner developing in C # .Net and I need your support to be the next insert. the data of a DataGridView stores it in a DataTable and it is done, but I do not know how to send that serialized data to the class that makes the insertion. I hope your support.

private void btnGrabar_Click(object sender, EventArgs e)
{

    DataTable dt = new DataTable();
    DataSet ds = new DataSet();
    foreach (DataGridViewColumn col in dgvPais.Columns)
    {
        dt.Columns.Add(col.DataPropertyName, col.ValueType);
    }
    foreach (DataGridViewRow row in dgvPais.Rows)
    {
        DataRow rows = dt.NewRow();
        for(int i =0;i < dgvPais.ColumnCount; i++)
             rows[i] = (row.Cells[i].Value == null ? DBNull.Value : 
               row.Cells[i].Value);

        dt.Rows.Add(rows);
    }
    ds.Tables.Add(dt);
    StreamWriter streamWriter=new StreamWriter("xml.xml");
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataSet));
    xmlSerializer.Serialize(streamWriter, ds);
    enviarxml(streamWriter); ------------------------------------------------Error
}

private void enviarxml(StreamWriter xml)
{
    //SqlConnection con = new SqlConnection(cn);
    SqlCommand cmd = new SqlCommand("InsertXML",cn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@xml", xml);
    cn.Open();
    cmd.ExecuteNonQuery();
    cn.Close();
}
    
asked by Marco 22.01.2018 в 00:40
source

1 answer

0

You can use the DataTable.WriteXml

method

Here is an example:

string result;
using (StringWriter sw = new StringWriter()) 
{
    dataTable.WriteXml(sw);
    result = sw.ToString();
}

If you really do not need a string but processable read-only XML, it's a better idea to use MemoryStream and XPathDocument :

XPathDocument result;
using (MemoryStream ms = new MemoryStream()) 
{
    dataTable.WriteXml(ms);
    ms.Position = 0;
    result = new XPathDocument(ms);
}

SQL / C #

SqlConnection sqlCon= new SqlConnection(CS);
SqlCommand cmd = new SqlCommand("INSERT INTO MyTable (MyCol) values (@paramValue)", sqlCon);
cmd.Parameters.Add(new SqlParameter("@paramValue", filteredXmlData));

sqlCon.Open();
int rowsAffected = cmd.ExecuteNonQuery();
sqlCon.Close();
    
answered by 22.01.2018 в 15:29