webForumDet fria alternativet

C# och OleDbDataAdapter

7 svar · 349 visningar · startad av m_soderlund

m_soderlundMedlem sedan sep. 20026 425 inlägg
#1

Hej!
Jag använder följande kod för att visa lite namn ur en exempeldatabas. Nu är det så att det blir ett felmeddelande och det klagas på dg1.DataSource = objDataset.Tables("tbl");-raden som jag markerat extra.
Jag undrar vad som kan vara fel? Längre ner ser ni VB-koden som utför samma sak.

<%@ Page Language="C#" Strict="False" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    DataSet objDataset = new DataSet();

    void Page_Load()
    {
    if(!Page.IsPostBack)
    {

      string CnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("../db2.mdb");
      string SQL = "SELECT Namn FROM tbl";
      OleDbConnection Cn = new OleDbConnection(CnStr);
      OleDbDataAdapter objAdapter = new OleDbDataAdapter(SQL, Cn);

          objAdapter.Fill(objDataset, "tbl");
          [b]dg1.DataSource = objDataset.Tables("tbl");[/b]
          dg1.DataBind();
          ViewState("Dataset")=objDataset;

      Cn.Close();

     }

     }

    void ChangePage(Object objSender, DataGridPageChangedEventArgs e)
    {
     dg1.CurrentPageIndex = e.NewPageIndex;
     DoDataBind();
    }

    void DoDataBind()
    {
     objDataset = ViewState("Dataset");
     dg1.DataSource = objDataset.Tables("tbl");
     dg1.DataBind();
    }

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
    <title>C# paging^DataGrid & DataSet</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

    <form runat="server">
        <asp:datagrid id="dg1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanged="ChangePage"
        AutoGenerateColumns="True" Gridlines="None">
            <PagerStyle Mode="NumericPages" />
        </asp:dataGrid>
    </form>

</body>
</html>

VB-kod:

<%@ Page Language="VB" Strict="False" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<script runat="server">

    Dim objDataset as New Dataset()
    
    Sub Page_Load()
     If Not Page.IsPostBack Then
    
      Dim CnStr as string = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("../db2.mdb")
      Dim SQL as string = "SELECT Namn FROM tbl"
      Dim Cn as new OleDbConnection(CnStr)
      Dim objAdapter as new OledbDataAdapter(SQL, Cn)
    
          objAdapter.Fill(objDataSet, "tbl")
          dg1.DataSource = objDataSet.Tables("tbl").DefaultView
          dg1.DataBind()
          ViewState("Dataset")=objDataSet
    
      Cn.Close()
    
     End if
    End sub
    
    Sub ChangePage(objSender as Object, e as DataGridPageChangedEventArgs)
     dg1.CurrentPageIndex = e.NewPageIndex
     DoDataBind()
    End sub
    
    Sub DoDataBind()
     objDataset = ViewState("Dataset")
     dg1.DataSource = objDataset.Tables("tbl").Defaultview
     dg1.DataBind()
    End Sub

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
    <title>VB paging^DataGrid & DataSet</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

    <form runat="server">
        <asp:datagrid id="dg1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanged="ChangePage"
        AutoGenerateColumns="True" Gridlines="None">
            <PagerStyle Mode="NumericPages" />
        </asp:dataGrid>
    </form>

</body>
</html>

Tacksam för hjälp!

VideMedlem sedan dec. 19998 577 inlägg
#2

Vad säger felmeddelandet?

m_soderlundMedlem sedan sep. 20026 425 inlägg
#3

Vide skrev:

Vad säger felmeddelandet?

Jag kommer inte ihåg. :( Datorn har jag hemma, hemma har jag modemuppkoppling = segt, samt att jag nu är i skolan.

m_soderlundMedlem sedan sep. 20026 425 inlägg
#4

Felet är detta:

CS0118: 'System.Data.DataSet.Tables' denotes a 'property' where a 'method' was expected
rad 19 dg1.DataSource = objDataset.Tables("tbl");

Tacksam för hjälp!

PatrikBMedlem sedan mars 20002 836 inlägg
#5

Ska nog vara:

dg1.DataSource = objDataset.Tables("tbl").DefaultView;

cya,
/PatrikB

m_soderlundMedlem sedan sep. 20026 425 inlägg
#6

Jag testade med DefaultView från början, men det fungerade inte på servern. (http://www.dileno.hel.nu/asp/c-sharp_paging.aspx)
Dock har jag inte testat sidan lokalt med DefaultView - jag har en svagförnimmelse av att jag testat sidan lokalt med Defaultview och C# är ju shiftlägeskänsligt.. :)

PatrikBMedlem sedan mars 20002 836 inlägg
#7

he, he ... jepp, den är CaseSensitive

Felet ligger dock på en annan nivå. I VB används oftast ("ItemName") men i C# så är det ["ItemName"]

Ändra .Tables["tbl"] och även när du sparar till ViewState["ViewStateName"] så kommer det att gå finemang :e

cya,
/PatrikB

m_soderlundMedlem sedan sep. 20026 425 inlägg
#8

Tack för hjälpen - dock verkar det som att "min" server inte klarar av C#. Ska testa koden lokalt sen.. :D

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)