我有一个表有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();
}
}
答案 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);
}