小弟从外部的excel中读取了数据,并填充到dataset中,然后想将dataset中的数据都
插入到数据库中指定的表,填充的数据只是表中字段的一部分。请问怎么来做呀
大哥帮忙!!!!!!!!!!!!!!!!!!!!!!!
if( ( this.File1.PostedFile != null ) && (this.File1.PostedFile.ContentLength > 0 ) )
{
string fn=File1.PostedFile.FileName;
try
{
//向excel中填写数据
string strCon = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+@fn+";Extended Properties=Excel 8.0" ;
OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection (strCon) ;
string strCom = " SELECT * FROM [Sheet1$] " ;
oleDbConnection1.Open () ;
//file://打开数据链接,得到一个数据集
OleDbDataAdapter oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter ( strCom ,oleDbConnection1 ) ;
// file://创建一个 DataSet对象
DataSet myDataSet = new DataSet () ;
// file://得到自己的DataSet对象
oleDbDataAdapter1.Fill(myDataSet);
//file://关闭此数据链接
oleDbConnection1.Close() ; 
DataGrid1.DataSource = myDataSet;
this.DataGrid1.DataBind();
Response.Write(myDataSet.Tables[0].Rows[0][0].ToString());
//统一插入
try
{
string myConnection="Initial Catalog=dgda;Data Source=zzy;user id=sa;password=aaaaaa;";
SqlConnection myConn = new SqlConnection(myConnection);
SqlDataAdapter myDataAdapter = new SqlDataAdapter("selcet bh,xm,xb,zz,xl,zyfw,zyzl,zydq,qb,xf,bxf,sf from tusedgda",myConn);
myDataAdapter.TableMappings.Add("Table","tusedgda");
SqlCommandBuilder CB = new SqlCommandBuilder(myDataAdapter);
myConn.Open();
int i=CB.DataAdapter.Update(myDataSet);
if(i>0)
{
Response.Write("sssss");
}
myConn.Close();
Response.Write("插入成功");
}
catch(Exception a)
{
Response.Write(a.Message);
}
但是没有执行插入,郁闷

解决方案 »

  1.   

    // file://得到自己的DataSet对象oleDbDataAdapter1.AcceptChangesDuringFill = false;  //在这试试加上这句oleDbDataAdapter1.Fill(myDataSet);
    //file://关闭此数据链接
      

  2.   

    myDataSet的数据都是重 excel 里面填充进来的,填充进来的数据,每一行的数据状态都是Unchanged的,在使用 Adapter 对象进行改新时,只能行的状态是 Added, Deleted, Modified 等状态的行才会被更新,而你上面的 myDataSet 里面的数据行的状态全是 Unchanged,所以就不会更新数据了.
      

  3.   

    这是不行的,必须换种思路;
    原因:你必须了解DataAdapter的Update方法的原理,它的操作基于DataRow的RowState属性,当删除、修改、新增一行时,这一行的RowState属性会自动更改为相应的状态,然后,调用Update方法时就会搜索这些状态,利用生成的Command取更新数据库;说到这里,差不多就明白了,由于你的DataTable是从excel读进来的,它的RowState属性并未进行任何更改,Update时也就不会更新任何数据!另外遗憾的是DataRow的RowState属性时只读的。可以改一下,新定义一个DataTable,用一个循环从原有的DataTable中逐条插入到新的DataTable中,然Update这个DataTable;
      

  4.   

    Eddie005(暴走005) :
    思路是好的, 但是请参考DataAdapter的AcceptChangesDuringFill属性DataAdapter在设计时并不是没有考虑这些的