none
Dim MyDataTable As New DataTable("通訊錄") 解釋 請教 RRS feed

  • 問題

  • 您好:

    以下程式碼中,

    <!-- [if gte mso 10]> <mce:style>

      Dim MyDataTable As New DataTable(" 通訊錄" )

      Dim MyRow As DataRow=MyDataTable.NewRow()

      Ds.Tables.Add(MyDataTable)

      Da.Fill(Ds, " 通訊錄" )

     

    New DataTable(" 通訊錄" ) 的通訊錄名稱

    Da.Fill(Ds, " 通訊錄" ) 的通訊錄名稱 是否要一樣

      Ds.Tables.Add(MyDataTable)  應該是加入 把 New DataTable(" 通訊錄" ) 加入Ds中

    還需要再把da的資料 加到DS中?    Da.Fill(Ds, " 通訊錄" )

    要如何以文字來說明這一段 的程式碼?

     


     

     

    <%@ Import NameSpace="System.Data" %>
    <%@ Import NameSpace="System.Data.OleDb" %>
    <Html>
    <Body>
    <Table>
     <Tr><Td>
      <ASP:Table Id="Table1" Runat="Server" Border="1" Align="Center"/>
     </Td><Td>
      <Form Runat="Server">
       姓名:<ASP:TextBox Id="NewName" Runat="Server"/>   <Br>
       電話:<ASP:TextBox Id="NewTel" Runat="Server"/>   <Br>
       分類:<ASP:TextBox Id="NewGup" Runat="Server"/>   <Br>
       <ASP:Button Id="Button1" Runat="Server" Text="確定新增" OnClick="Button1_Click"/>
      </Form>
     </Td></Tr>
    </Table>
    
    <Script Language="VB" Runat="Server">
     Const Provider1="Provider=Microsoft.Jet.OLEDB.4.0;"
     Const DataSource1="Data Source="
     Const ConStr1=Provider1+DataSource1
     ConSt SelStr="Select * From 通訊錄"
     Private Ds As New DataSet()
     
     Sub Page_Load(Sender As Object, e As EventArgs)
      If Page.IsPostBack=False Then
       Dim ConStr As String
          ConStr = ConStr1 + Server.MapPath("..\..\x\1.mdb")
       Dim Da As New OleDbDataAdapter(SelStr, ConStr)
       Da.Fill(Ds, "通訊錄")
       LoadData()  
      End If  
     End Sub
     
     Sub LoadData()
      Dim i,j As Integer
      Dim Row1 As TableRow = New TableRow()
      Dim Cell1 As TableCell
        
      For i=0 To Ds.Tables("通訊錄").Columns.Count-1
       Cell1=New TableCell()
       Cell1.Text=Ds.Tables("通訊錄").Columns(i).ToString
       Row1.Cells.Add(Cell1)
      Next
      Table1.Rows.Add(Row1)
      
      For i=0 To Ds.Tables("通訊錄").Rows.Count-1
       Row1=New TableRow()
       For j=0 To Ds.Tables("通訊錄").Columns.Count-1
        Cell1=New TableCell()
        If Ds.Tables("通訊錄").Rows(i).IsNull(j) Then
         Cell1.Text="未填寫"
        Else
         Cell1.Text=Ds.Tables("通訊錄").Rows(i).Item(j)
        End If    
        Row1.Cells.Add(Cell1)
       Next
       Table1.Rows.Add(Row1)
      Next
     End Sub
    
     Sub Button1_Click(Sender As Object, e As EventArgs)
      Dim ConStr As String
        ConStr = ConStr1 + Server.MapPath("..\..\x\1.mdb")
      Dim Da As New OleDbDataAdapter(SelStr, ConStr)
        Dim Builder1 As New OleDbCommandBuilder(Da) '---自動產生所需的A/D/U指令
      Dim MyDataTable As New DataTable("通訊錄")
      Dim MyRow As DataRow=MyDataTable.NewRow()
      Ds.Tables.Add(MyDataTable)
      Da.Fill(Ds, "通訊錄")
    
      If NewName.Text<>"" Then
       MyRow("姓名")=NewName.Text
      End If
      
      If NewTel.Text <> "" Then
       MyRow("電話")=NewTel.Text
      End If
      
      If NewGup.Text <> "" Then
       MyRow("分類")=NewGup.Text
      End If
         
      MyDataTable.Rows.Add(MyRow) 'DataSet 中 
        Da.Update(Ds, "通訊錄") '執行 Update指令 ,DB之Table
      LoadData()
     End Sub
    </Script>
    </Body>
    </Html>
    
    

     

    2010年8月20日 下午 12:48

解答

  • 寫這樣就夠了

    Da.Fill(Ds, " 通訊錄" )

     

    這一句可以不用寫

    Dim MyDataTable As New DataTable(" 通訊錄" )

    • 已提議為解答 hunterpo0323 2010年8月21日 上午 10:28
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:26
    2010年8月21日 上午 06:32
    版主

所有回覆

  • New DataTable(" 通訊錄" )==>是指給DataTable一個新的名稱

    可以直接把da填到DataTable裡就可,不用再多用一個ds,

    一個ds可以容納多個DataTable,ds是一個集合,而你只要操作一個table即可,

    否則反而會造成自己的混亂.

    參考:

    http://technet.microsoft.com/zh-tw/library/ms131055.aspx

    2010年8月20日 下午 08:03
  • '建立一個新的DataTable, 並將所建立的DataTable命名成:通訊錄

    Dim MyDataTable As New DataTable(" 通訊錄" )

    '填入資料到名稱為通訊錄的DataTable

    Da.Fill(Ds, " 通訊錄" )

     

    所以這兩個名稱要一樣

    2010年8月21日 上午 02:48
  • 建立一個新的DataTable, 並將所建立的DataTable命名成:通訊錄

    Dim MyDataTable As New DataTable(" 通訊錄" )

    '填入資料到名稱為通訊錄的DataTable

    Da.Fill(Ds, " 通訊錄" )

     

    所以這兩個名稱要一樣

    ------------

    那請問,

    '填入資料到名稱為通訊錄的DataTable

    Da.Fill(Ds, " 通訊錄" ) 還要再做一次嗎?

    這樣是否有重複做一件事...?


     

    2010年8月21日 上午 05:43
  • 寫這樣就夠了

    Da.Fill(Ds, " 通訊錄" )

     

    這一句可以不用寫

    Dim MyDataTable As New DataTable(" 通訊錄" )

    • 已提議為解答 hunterpo0323 2010年8月21日 上午 10:28
    • 已標示為解答 Lolota Lee 2010年8月23日 上午 02:26
    2010年8月21日 上午 06:32
    版主
  • 沒有重複。
    Dim MyDataTable As New DataTable(" 通訊錄" )
    ↑ 用來建立一個名叫 " 通訊錄" 的 DataTable (僅此而已,還沒有資料);
    Da.Fill(Ds, " 通訊錄" )
    ↑ 叫用 DataAdapter.Fill 方法將 SELECT 陳述式擷取的資料填入 Ds 裡名叫 " 通訊錄" 的 DataTable;

    只不過單獨寫 Da.Fill(Ds, " 通訊錄") 也有同等效果,若指定名稱的 DataTable 已存在則直接將資料填入,不存在會先建立 DataTable 再填入資料。
    Hunterpo's IT Vision - http://www.dotblogs.com.tw/hunterpo/
    2010年8月21日 上午 10:45