无法使用datatable在表中插入数据

时间:2014-03-03 19:13:24

标签: asp.net sql-server c#-4.0 datatable

我有一个表有3行,我试图使用数据表将数据插入前两行,但它插入这样的数据,而不是插入前两行,它插入其他行

                 price  qty  total
                --------------------
                  5     10    -

                  5     12    -

                  -      -    50

                  -      -    60

但我想要

                 price  qty  total
                --------------------
                  5     10    50

                  5     12    60

我使用以下代码从表中选择数据而不是将数据插入表中,它正确显示数据但只插入错误的行

 int sp;
public DataTable bind1()
{
    SqlConnection con = new SqlConnection("cnnection");
    con.Open();
    SqlCommand cmd;
    cmd = new SqlCommand("select * from [order]", con);      
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    con.Close();
    return dt;
}
public DataTable bind2()
{
    SqlConnection con = new SqlConnection("cnnection");
    con.Open();
    SqlCommand cmd;
    cmd = new SqlCommand("insert into [order](total) values(@total)", con);
    cmd.Parameters.AddWithValue("@total", sp);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    con.Close();
    return dt;
}    
 public void gbind()
    {
        DataTable dt = new DataTable();
        dt = bind1();
        DataTable dt1 = new DataTable();
        DataColumn dc = new DataColumn("total");
        dt1.Columns.Add(dc);        
        foreach(DataRow drow in dt.Rows)
           {
            int s1 = Convert.ToInt16(drow["price"]);
            int s2 = Convert.ToInt16(drow["qty"]);
            int s3 = s1 * s2;
            DataRow dr = dt1.NewRow();
            dr["total"] = s3;
            dt1.Rows.Add(dr);
            }           
         foreach (DataRow row in dt1.Rows)
            {
             string s1 = row["total"].ToString();
             for (int i = 0; i < dt.Rows.Count; i++)
              {
                sp = Convert.ToInt16(s1);
                dt = bind2();
              }
            }

我也尝试了这样但仍然是同样的问题

public void gbind()
    {
        DataTable dt = new DataTable();
        dt = bind1();       
        foreach (DataRow drow in dt.Rows)
        {
            int s1 = Convert.ToInt16(drow["price"]);
            int s2 = Convert.ToInt16(drow["qty"]);
            int s3 = s1 * s2;                    
            drow["total"] = s3;
            sp = s3;
            dt = bind2();            
        }
     }

2 个答案:

答案 0 :(得分:0)

在gbind方法的forEach循环中,我认为你不应该为“total”添加一个新行,它需要是一个列。并且dt1.Rows.Add(dr)应该是dt1.Columns.Add(dr)。尝试重写代码以添加列。如果有帮助,请告诉我。

答案 1 :(得分:0)

在代码中注释这两行。删除代码以添加额外的行。您只需要更新列值。

foreach(DataRow drow in dt.Rows)
           {
            int s1 = Convert.ToInt16(drow["price"]);
            int s2 = Convert.ToInt16(drow["qty"]);
            int s3 = s1 * s2;
            //DataRow dr = dt1.NewRow();
            dr["total"] = s3;
            //dt1.Rows.Add(dr);
            }