100分求解,怎样把DataTable中的数据放到数据库里 要是保存到一个单一表时好说,如果要保存到多表我想还是要用SQL一条一条的向数据库insert,如果一开始就打开了一个表,之后用update就可以加到数据库了,当然这个表要和数据库里的表是对应的,比如说你这个dt是从数据库select * from dt来的就可以. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对于单表来说可以如下:SqlConnection sqlConn = new SqlConnection(strSQLConfig);sqlConn.Open();SqlDataAdapter sqlAdapter = new SqlDataAdapter();sqlAdapter.SelectCommand = new SqlCommand("select * from tablename",sqlConn);DataTable Dt = new DataTable();sqlAdapter.Fill(Dt);sqlAdapter.Update();好像是这样,没有测试过,思路是这样的.如果想写到数据库里的多个表,最好用一个for之类的一条数据一条数据的写入到数据库里. SqlConnection sqlConn = new SqlConnection(strSQLConfig);sqlConn.Open();//****不用打开string cmdString = "select * from table"//这个根据你的表和数据库的结构添。 // * 添成数据库中对应表的列名 //如果全部列都选,则添 * 就可以了。SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmdString, sqlConn); DataSet DS = new DataSet();//这行不用DS.Tables.Add(Dt);//这行也不用DataTableMappings tblMap;tblMap = sqlAdapter.TableMappings.Add("Table", Dt.TableName);//数据表和数据库 //中的表对应tblMap.ColumnMappings.Add("数据库中的列名","数据表中的对应列名");... //把所有列对应都加上sqlAdapter.Update(Dt); 但是这样也不一定就行,还要求Dt中的更改属性正确无误。主要就是那个Dt是怎么来的。如果是从sqlAdapter.Fill()中来的,不管改没改过,直接sqlAdapter.Update(Dt)就可以了。如果是自己建的表,那就得看情况了。请楼主详细说一下。 自己建的内存表,结构完全一样的话只要这样就行了:SqlConnection sqlConn = new SqlConnection(strSQLConfig);string cmdString = "select * from table"//这个根据你的表和数据库的结构添。 //"table"是数据库中对应表的表名SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmdString, sqlConn);sqlAdapter.TableMappings.Add("Table", Dt.TableName);//数据表和数据库 //中的表对应sqlAdapter.Update(Dt); SqlConnection sqlConn = new SqlConnection(strSQLConfig);sqlConn.Open();//这儿应该这么写SqlCommand cmd=new SqlCommand("查询字符串",sqlConn);SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd); DataSet DS = new DataSet();sqlAdapter.Fill(Ds,"ZJ_QYXX");sqlAdapter.Update(DS,"ZJ_QYXX"); //string str_xh=Session["str_xh"].ToString().Trim(); string str_sqbh = this.bh.Text.Trim(); string str_djr = Session["YHBH"].ToString().Trim(); string str_dbbm = Session["bm"].ToString().Trim(); string str_djrq = System.DateTime.Today.ToString().Trim(); string str_ffrq = this.ffrq.Text.Trim(); string[] strgj=new string[this.DataGrid1.Items.Count]; //SQL for(int i=0;i<this.DataGrid1.Items.Count;i++) { TextBox txt3=(TextBox)this.DataGrid1.Items[i].FindControl("TextBox3"); string str_bh = this.DataGrid1.DataKeys[i].ToString().Trim(); string str_ffsl = txt3.Text.ToString().Trim(); strgj[i] ="update bgjxxb set ffsl="+ str_ffsl+"where left(bh,8 )='"+ str_sqbh+"' "; } string str_sql ="update mgjsq set ffrq='"+ str_ffrq+"' where bh='"+ str_sqbh+"'"; string str_sql1 ="insert into mlcxx (bh,sxh,ywlb,ztmc,blzt,blr,blrq,blzt_x,mc,ztmc_x,blr_x) values ('"+str_sqbh+"',3,'gj','材料发放','3','"+str_djr+"','"+str_djrq+"','8','河闸材料','结束','"+str_dbbm+"')"; conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; SqlTransaction trans = conn.BeginTransaction(); comm.Transaction = trans; try { comm.CommandText = str_sql1; comm.ExecuteNonQuery(); for (int j=0;j<strgj.Length;j++) { comm.CommandText = strgj[j]; comm.ExecuteNonQuery(); } comm.CommandText = str_sql; comm.ExecuteNonQuery(); trans.Commit(); conn.Close(); Response.Write("<script>alert('提交信息成功!')</script>"); string str_id = func.lcxh(str_sqbh,"gj","3"); Session["id"] = str_id; Response.Write("<script>parent.frm1.document.location.reload('lct.aspx')</script>"); Response.Write("<script>self.document.location.reload('lcnr.aspx')</script>"); } catch { Response.Write("<script>alert('提交信息失败,请检查!')</script>"); } 这些代码好像都有问题:你可以参考一下IDE自动生成的代码用“数据窗体向导"生成一个窗体,研究一下里面的代码,比你在这儿问快得多啦 它和“DataGrid”没什么区别吧。应该是一样的。 treeview,datagridview控件的联合使用! 字符串转换为时间格式 局域网共享打印机的问题 怎么样在程序里面操纵IIS? 如何用向一个控件发送事件 翻译 c#问题 菜鸟请教程序中用到ShowMessage("...")时,开头该用using +? 谢谢 关于跨类访问窗体控件的方法 怎么在DataGrid控件的每一行前面添加一个CheckBox控件(winform)? 怎样处理及时更新数据源?(在线等) DataRowCollection?
SqlConnection sqlConn = new SqlConnection(strSQLConfig);
sqlConn.Open();SqlDataAdapter sqlAdapter = new SqlDataAdapter();
sqlAdapter.SelectCommand = new SqlCommand("select * from tablename",sqlConn);DataTable Dt = new DataTable();
sqlAdapter.Fill(Dt);
sqlAdapter.Update();
好像是这样,没有测试过,思路是这样的.
如果想写到数据库里的多个表,最好用一个for之类的一条数据一条数据的写入到数据库里.
sqlConn.Open();//****不用打开
string cmdString = "select * from table"//这个根据你的表和数据库的结构添。
// * 添成数据库中对应表的列名
//如果全部列都选,则添 * 就可以了。SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmdString, sqlConn);
DataSet DS = new DataSet();//这行不用
DS.Tables.Add(Dt);//这行也不用DataTableMappings tblMap;
tblMap = sqlAdapter.TableMappings.Add("Table", Dt.TableName);//数据表和数据库
//中的表对应
tblMap.ColumnMappings.Add("数据库中的列名","数据表中的对应列名");
... //把所有列对应都加上
sqlAdapter.Update(Dt);
主要就是那个Dt是怎么来的。
如果是从sqlAdapter.Fill()中来的,不管改没改过,直接sqlAdapter.Update(Dt)就可以了。
如果是自己建的表,那就得看情况了。
请楼主详细说一下。
string cmdString = "select * from table"//这个根据你的表和数据库的结构添。
//"table"是数据库中对应表的表名SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmdString, sqlConn);sqlAdapter.TableMappings.Add("Table", Dt.TableName);//数据表和数据库
//中的表对应
sqlAdapter.Update(Dt);
sqlConn.Open();
//这儿应该这么写SqlCommand cmd=new SqlCommand("查询字符串",sqlConn);
SqlDataAdapter sqlAdapter = new SqlDataAdapter(cmd);
DataSet DS = new DataSet();
sqlAdapter.Fill(Ds,"ZJ_QYXX");sqlAdapter.Update(DS,"ZJ_QYXX");
string str_sqbh = this.bh.Text.Trim();
string str_djr = Session["YHBH"].ToString().Trim();
string str_dbbm = Session["bm"].ToString().Trim();
string str_djrq = System.DateTime.Today.ToString().Trim();
string str_ffrq = this.ffrq.Text.Trim();
string[] strgj=new string[this.DataGrid1.Items.Count];
//SQL
for(int i=0;i<this.DataGrid1.Items.Count;i++)
{
TextBox txt3=(TextBox)this.DataGrid1.Items[i].FindControl("TextBox3");
string str_bh = this.DataGrid1.DataKeys[i].ToString().Trim();
string str_ffsl = txt3.Text.ToString().Trim();
strgj[i] ="update bgjxxb set ffsl="+ str_ffsl+"where left(bh,8 )='"+ str_sqbh+"' ";
}
string str_sql ="update mgjsq set ffrq='"+ str_ffrq+"' where bh='"+ str_sqbh+"'"; string str_sql1 ="insert into mlcxx (bh,sxh,ywlb,ztmc,blzt,blr,blrq,blzt_x,mc,ztmc_x,blr_x) values ('"+str_sqbh+"',3,'gj','材料发放','3','"+str_djr+"','"+str_djrq+"','8','河闸材料','结束','"+str_dbbm+"')";
conn.Open();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
SqlTransaction trans = conn.BeginTransaction();
comm.Transaction = trans;
try
{
comm.CommandText = str_sql1;
comm.ExecuteNonQuery();
for (int j=0;j<strgj.Length;j++)
{
comm.CommandText = strgj[j];
comm.ExecuteNonQuery();
}
comm.CommandText = str_sql;
comm.ExecuteNonQuery();
trans.Commit();
conn.Close();
Response.Write("<script>alert('提交信息成功!')</script>");
string str_id = func.lcxh(str_sqbh,"gj","3");
Session["id"] = str_id;
Response.Write("<script>parent.frm1.document.location.reload('lct.aspx')</script>");
Response.Write("<script>self.document.location.reload('lcnr.aspx')</script>");
}
catch
{
Response.Write("<script>alert('提交信息失败,请检查!')</script>");
}
你可以参考一下IDE自动生成的代码
用“数据窗体向导"生成一个窗体,研究一下里面的代码,比你在这儿问快得多啦