如何将数据网格视图中的多个行值插入到表的单个字段中?

时间:2014-11-21 20:09:49

标签: c# datagridview insert field rows

我有一个表单,我在其中列出了客户想要购买的文章列表,我需要将所有文章名称保存到单个字段中,例如:article 1, article 2, article 3所以当我打印报告时,我可以看到所有单行中的文章,但我真的不知道该怎么做我尝试了几种方法,但我唯一能做的就是计算行的数量,顺便说一下我在其他字段中使用参数插入值,所以我不能让它改变查询,这就是我正在使用的:

private void btnfacturar_Click(object sender, EventArgs e)
{
    var articulos = new List<string>(); 
    var combinedString = string.Empty;
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
       string strArticulos = row.Cells["Articulos"].Value.ToString();
       articulos.Add(strArticulos); //this should make it easier for you to understand
    }
    combinedString = string.Join<string>(" ", articulos);

   try
   {
    System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Data Source=USER-PC;Initial Catalog=dbpuntodeventa;Integrated Security=True");
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "INSERT INTO equipos VALUES (@nombre,@estado,@servicio,@fechaderecepcion,@nombredecliente, @apellido, @edad, @documento,@tipodedocumento,@email,@telefono,@direccion,@imagen,@piezas,@tipodepago,@abono,@garante,@preciodepiezas,@manodeobra,@total,@devuelta,@descuento,@imagendedocumento,@pago,@itbis,@tamaño,@capacidad,@marca,@modelo)";
    cmd.Parameters.Add("@nombre", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@estado", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@servicio", System.Data.SqlDbType.VarChar, 40);
    cmd.Parameters.Add("@fechaderecepcion", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@nombredecliente", System.Data.SqlDbType.VarChar, 10);
    cmd.Parameters.Add("@apellido", System.Data.SqlDbType.VarChar, 25);
    cmd.Parameters.Add("@edad", System.Data.SqlDbType.Int);
    cmd.Parameters.Add("@documento", System.Data.SqlDbType.VarChar, 13);
    cmd.Parameters.Add("@tipodedocumento", System.Data.SqlDbType.VarChar);
    cmd.Parameters.Add("@email", System.Data.SqlDbType.VarChar, 35);
    cmd.Parameters.Add("@telefono", System.Data.SqlDbType.VarChar, 12);
    cmd.Parameters.Add("@direccion", System.Data.SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@imagen", System.Data.SqlDbType.Image);
    cmd.Parameters.Add("@piezas", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@tipodepago", System.Data.SqlDbType.VarChar, 15);
    cmd.Parameters.Add("@abono", System.Data.SqlDbType.VarChar, 10);
    cmd.Parameters.Add("@garante", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@preciodepiezas", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@manodeobra", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@total", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@devuelta", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@descuento", System.Data.SqlDbType.VarChar, 5);
    cmd.Parameters.Add("@imagendedocumento", System.Data.SqlDbType.Image);
    cmd.Parameters.Add("@pago", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@itbis", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@tamaño", System.Data.SqlDbType.VarChar, 5);
    cmd.Parameters.Add("@capacidad", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@marca", System.Data.SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@modelo", System.Data.SqlDbType.VarChar, 50);


    cmd.Parameters["@nombre"].Value = equipoTextBox.Text;
    cmd.Parameters["@estado"].Value = estadoTextBox.Text;
    cmd.Parameters["@servicio"].Value = servicioComboBox.Text;
    cmd.Parameters["@fechaderecepcion"].Value = txtfecha.Text;
    cmd.Parameters["@nombredecliente"].Value = nombreTextBox.Text;
    cmd.Parameters["@apellido"].Value = apellidoTextBox.Text;
    cmd.Parameters["@edad"].Value = edadTextBox.Text;
    cmd.Parameters["@documento"].Value = documentoMaskedTextBox.Text;
    cmd.Parameters["@tipodedocumento"].Value = tipodedocumentoComboBox.Text;
    cmd.Parameters["@email"].Value = emailTextBox.Text;
    cmd.Parameters["@telefono"].Value = telefonoMaskedTextBox.Text;
    cmd.Parameters["@direccion"].Value = direccionTextBox.Text;
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    imagenPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    cmd.Parameters["@imagen"].Value = ms.GetBuffer();
    cmd.Parameters["@piezas"].Value = articulos;
    cmd.Parameters["@tipodepago"].Value = cbtipodepago.Text;
    cmd.Parameters["@abono"].Value = txtabono.Text;
    cmd.Parameters["@garante"].Value = txtgarante.Text;
    cmd.Parameters["@preciodepiezas"].Value = txtpreciodepiezas.Text;
    cmd.Parameters["@manodeobra"].Value = txtmanodeobra.Text;
    cmd.Parameters["@total"].Value = txttotal.Text;
    cmd.Parameters["@devuelta"].Value = txtsobrante.Text;
    cmd.Parameters["@descuento"].Value = cbdescuento.Text;
    System.IO.MemoryStream msi = new System.IO.MemoryStream();
    imagendedocumentoPictureBox.Image.Save(msi, System.Drawing.Imaging.ImageFormat.Jpeg);
    cmd.Parameters["@imagendedocumento"].Value = msi.GetBuffer();
    cmd.Parameters["@pago"].Value = txtpago.Text;
    cmd.Parameters["@itbis"].Value = txtitbis.Text;
    cmd.Parameters["@tamaño"].Value = tamañoTextBox.Text;
    cmd.Parameters["@capacidad"].Value = capacidadTextBox.Text;
    cmd.Parameters["@marca"].Value = marcaTextBox.Text;
    cmd.Parameters["@modelo"].Value = modeloTextBox.Text;

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    MessageBox.Show("Exito");

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());

    }
    if (txtgarante.Text == "")
    {
                frmfactura frma = new frmfactura();
                frma.ShowDialog();
    }
    else
    {
      frmrecibo frm = new frmrecibo();
      frm.ShowDialog();
      frmfactura2 frmi = new frmfactura2();
      frmi.ShowDialog();
    }
}            

1 个答案:

答案 0 :(得分:0)

如果此代码有效,则在将列表中的字符串存储到单个string变量后执行以下操作

var articulos = new List<string>(); 
var combinedString = string.Empty;
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
   string strArticulos = row.Cells["Articulos"].Value.ToString();
   articulos.Add(strArticulos); //this should make it easier for you to understand
}
combinedString = string.Join<string>(" ", articulos);
  

这将使所有文章被&#34; &#34;像article1 artice2 article3       string combinedString = string.Join(&#34;&#34;,articulos);

我会尝试使用此部分string.Join<string>(" "并尝试其他分隔符,例如*, , #,但在尝试插入SQL Server时使用特殊字符时,它被视为Injection我会坚持使用,逗号分隔符或空格&#34; &#34;例如

如果您想将上述方法作为方法调用,则以下是

var combinedStr = InsertConcatValuesIntoDB(articulos);

private static stringInsertConcatValuesIntoDB(List<string> aList)
{
    string combinedString = string.Join<string>(" ", aList);
    return combinedString;
}
  

这一行cmd.Parameters [&#34; @ piezas&#34;]。值= articulos;`应该是这个

cmd.Parameters["@piezas"].Value = combinedStr;