'读Excel表
         
 dim source As string="d:\text.xls"
 Dim myDataSet As new DataSet()
 Dim myOledbConnection As OledbConnection=new OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+source+";Extended Properties=Excel 8.0")
 Dim myOledbCommand As OledbCommand=new OledbCommand("Select * from [Sheet1$]",myOledbConnection)
 Dim myData As OledbDataAdapter=new OledbDataAdapter(myOledbCommand)
 myData.Fill(myDataSet)
 DataGrid1.DataSource=myDataSet.Tables(0).DefaultView
 DataGrid1.DataBind()         '写入数据库
     Dim table As DataTable=myDataSet.Tables(0)
 dim changedRow As new Arraylist
 Dim row As DataRow
 for each row in table.Rows
     if ((row.RowState) <> (DataRowState.Unchanged)) then
     changedRow.Add(row)
 end if  if (changedRow.Count=0) then
    return
 end if
 next  dim Conn As SqlConnection=new SqlConnection("server=localhost;uid=sa;pwd=;database=PhoneOther")
 Conn.open()
 Dim Str As String="Select * from Temp"
 Dim DataAdapter1 As SqlDataAdapter=new SqlDataAdapter(str,Conn)
 Dim builder As SqlCommandBuilder =new SqlCommandBuilder(DataAdapter1)
 DataAdapter1.UpdateCommand=builder.GetUpdateCommand
 Dim rows() As DataRow=ctype(changedRow.ToArray(GetType(DataRow)),DataRow())
 DataAdapter1.Update(rows)
 Conn.Close()
 DataAdapter1.Dispose()
读Excel表肯定没有问题,因为DataGrid已经显示了,可是数据库为什么什么东西都没有。我的数据库字段应该怎么设置,如我的表有两个字段W1,和W2,是不是我的数据库也要有两个字段?我应该怎么做?应该注意思什么?

解决方案 »

  1.   

    数据库一个表里面有相应的字段就好
    你写入的时候,要循环一下,for each
      

  2.   

    private void SaveChanges()
        {
            DataTable table = (DataTable)DataGrid.DataSource;
            ArrayList changedRow;
            DataRow row;
            ForEach(row In table.Rows)
              {
                If(row.RowState != DataRowState.Unchanged)
                    changedRow.Add(row);
               
                If(changedRow.Count == 0)
                    Return;
               }
            conn.Open();
            string str;
            str = "SELECT * FROM *";  //返回数据库的结构
            SqlDataAdapter adapter = New SqlDataAdapter(str, conn);
            SqlCommandBuilder builder = New SqlCommandBuilder(adapter);
            adapter.UpdateCommand = builder.GetUpdateCommand;
            DataRow rows = (DataRow)(changedRow.ToArray(GetType(DataRow)));
            adapter.Update(rows);
            conn.Close();
            adapter.Dispose();
       }
    以上是万用代码,代入就可以了
      

  3.   

    GDNPC(烟锁池塘柳,炮镇海城楼) ( ) 信誉:100 
    ==
    我的和你的没什么区别,只是一个C#代码,一个VB代码。
      

  4.   

    DATASET 可以批量更新
     或者自己循环判断每行 再更新也可以
      

  5.   

    而且我读Excel表那部分代码没有问题,DataGrid已经可以显示了。
      

  6.   

    你可以把DataTable打开,一行一行地写进去。试一下
      

  7.   

    GDNPC(烟锁池塘柳,炮镇海城楼) ( ) 信誉:100 
    ==
    我的和你的没什么区别,只是一个C#代码,一个VB代码。楼主试试把这句去掉,或许就可以了。
    If(changedRow.Count == 0)
                    Return;
               
    这段代码是书上的,没记错的话好像是外国人写的vb.net高级编程,清华大学出版社红色封面那个系列
      

  8.   

    If(changedRow.Count == 0)
                    Return;
    报错
    对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。 
      

  9.   

    我以前用的也是vb的那个版本,回答问题需要就把它翻译成c#了,所以c#能不能用我还没测试过。但vb那个版本有时的确不好使,但把return去掉就好用了。
      

  10.   

    还有我的第一句是这样写的:
    Dim table As DataTable=myDataSet.Tables(0)
    但是要像如下这么写就不对:
    Dim table As DataTable=CType(DataGrid1.DataSource,DataTable)这样写就不对。