Archief - Access naar SQL

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

wartaal

Legacy Member
Hey,

Ik zit met het volgende probleem. Voor school moet ik een tabel van access naar SQL zenden met behulp van untyped datasets. Nu heb ik al vanalles geprobeerd, maar kom steeds op deze fout terug:

Object reference not set to an instance of an object.

Krijg ik dus als ik mijn programma uitvoer.

M'n code:

Code:
 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
            }

En hier moet dus ergens het probleem zitten. 't probleem is dat hij nergens fouten aangeeft, dus weet niet waar het mis loopt. Denk dat ik nog code nodig heb om m'n tabel goed te transferen ofzo, maar heb al gezocht maar vind niet echt iets bruikbaars op inet.

Code:
public void BindGrid()
        {
        SqlConnection conn = null;
        OleDbConnection connII = null;
        try
         {
      //
      // Ophalen van de connectiestring en opzetten van de connectie
      //

      string connString = ConfigurationManager.ConnectionStrings["PrintersConnectionString"].ToString();
      string connStringII = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ToString();
      conn = new SqlConnection(connString);
      connII = new OleDbConnection(connStringII);

      //
      // Aanmaken van het selectiecommando
      //
      string sqlII = "SELECT * FROM tblPrinter ORDER BY ID";
      string sql = "SELECT * FROM tblPRINTER ORDER BY ID";
      SqlCommand cmd = new SqlCommand(sql, conn);
      OleDbCommand cmdII = new OleDbCommand(sqlII, connII);


      //
      // Aanmaken van een DataAdapter en toekennen van een selectcommand
      //
      OleDbDataAdapter ac = new OleDbDataAdapter();
      SqlDataAdapter da = new SqlDataAdapter();
      da.SelectCommand = cmd;
      ac.SelectCommand = cmdII;


      //
      // Aanmaken van een DataSet
      //
      DataSet ds = new DataSet();
      
        //
      // Bind de tabel aan de grid
      //
      
      gv.DataSource = ds.Tables["tblPRINTER"];
      gv.DataBind();

        
    }
    catch (Exception ex)
    {
      lblError.Text = ex.Message;
    }
  }

  protected void gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
  {
    gv.PageIndex = e.NewPageIndex;
    BindGrid();
  }
}

Aja, dus allemaal ASP.NET C#, maar dat wisten jullie al :p

Alvast bedankt voor de hulp!

Parnakra

Legacy Member
Je moet je connecties nog openen.

Als je Using(...){...} gebruikt zal je code trouwens wat overzichtelijker worden en wordt je connectie-object automatisch gesloten en opgeruimd.

wartaal

Legacy Member
Die Using bij het opzetten van de connectie gebruiken?

Eff vergeten te melden dat het hier om disconnected database gaat. Als ik de connectie open (conn.Open(); bedoel je he?) verandert er trouwens niks.

Toch al bedankt :)

wartaal

Legacy Member
Hmm, heb nog wat code toegevoegd en verder geprutst. En nu krijg ik nu een zeer vage fout.

Mijn code:

Code:
public partial class _Default : System.Web.UI.Page
    {
        private string accessConnString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ToString();
        private string sqlString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\randapparatuur.mdf;Integrated Security=True;User Instance=True";
        SqlConnection sqlconn = null;
        OleDbConnection conn = null;  
        OleDbCommand cmd = null;
        SqlCommand cmdII = null;
        OleDbDataReader reader = null;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
            }
      }

        public void BindGrid()
        {
        
        try
         {
      //
      // Ophalen van de connectiestring en opzetten van de connectie
      //
      int _recordCount = 0;  
      sqlconn = new SqlConnection(sqlString);
      conn = new OleDbConnection(accessConnString);
     

      //
      // Aanmaken van het selectiecommando
      //
      string sqlII = "INSERT INTO tblPRINTER(PRINTER_ID, MERK, MODEL)" +
                       "VALUES( @id, @merk, @model)";
      string sql = "SELECT * FROM tblPrinter ORDER BY ID";
     
      cmd = new OleDbCommand(sql, conn);
      conn.Open();
      reader = cmd.ExecuteReader();

      while (reader.Read())
      {
          cmdII = new SqlCommand(sqlII, sqlconn);

          int id = (int)reader["PRINTER_ID"];
          string merk = (string)reader["MERK"];
          string model = (string)reader["MODEL"];

          // Definiëren van de parameters. De waarden worden meteen meegegeven
          cmdII.Parameters.AddWithValue("@id", id);
          cmdII.Parameters.AddWithValue("@merk", merk);
          cmdII.Parameters.AddWithValue("@model", model);

          // Connectie openen, commando uitvoeren en connectie sluiten
          conn.Open();
          cmdII.ExecuteNonQuery();
          conn.Close();

      



      //
      // Aanmaken van een DataAdapter en toekennen van een selectcommand
      //
      OleDbDataAdapter ac = new OleDbDataAdapter();
      SqlDataAdapter da = new SqlDataAdapter();

      da.SelectCommand = cmdII;


      //
      // Aanmaken van een DataSet
      //
      DataSet ds = new DataSet();
      
        //
      // Bind de tabel aan de grid
      //
      
      gv.DataSource = ds.Tables["tblPRINTER"];
      gv.DataBind();

      _recordCount++;
      }
      conn.Close();

        
    }
    catch (Exception ex)
    {
      lblError.Text = ex.Message;
    }
  }

  protected void gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
  {
    gv.PageIndex = e.NewPageIndex;
    BindGrid();
  }
}
}

Tgaat specifiek over deze regel:

Code:
private string accessConnString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ToString();

Hij geeft dan deze error:
NullReferenceException was unhandled by user code.

In een andere oefening heb ik die regel ook al gebruikt, en daar geeft 'm dat niet... Mss moet ik nog iets toevoegen ofzo dat ik over het hoofd gezien heb?

Cycloon

Legacy Member
Er moet in uw web.config bij de connection strings uiteraard een entry staan met de naam "AccesConnectionString", dat zal hier niet het geval zijn ;)

wartaal

Legacy Member
Tnx! Van die fout ben ik al vanaf!

Nu krijg ik in mijn grid, waar mijn tabel tevoorschijn zou moeten komen dit:

Waarden voor een of meer vereiste parameters ontbreken.

Ben er nog naar aant zoeken, en toch al merci voor de hulp :)

Zapp

Legacy Member
//
// Aanmaken van een DataSet
//
DataSet ds = new DataSet();

//
// Bind de tabel aan de grid
//

gv.DataSource = ds.Tables["tblPRINTER"];
gv.DataBind();
Je maakt een nieuwe dataset aan, en doet er verder niets mee. Dan ga je die lege, ongebruikte dataset aan je gridview toekennen, en doe je of er in je set een tabel zit. Does not compute hé ;)

wartaal

Legacy Member
Hmmm? Moetk ik die SQLadapter er dan aan verbinden ofzo?

Met dit lukt het al niet

Code:
DataSet ds = new DataSet();
      
      da.Fill(ds);

Parnakra

Legacy Member
Serieus, als je zelf die errors niet kan interpreteren en oplossen staat er je nog heel wat te wachten. :/

voltje

Legacy Member
Je moet ergens beginnen he :)
Maar zoiezo DEBUGGEN en ERRORS lezen.
Break points plaatsen en lijn per lijn overlope :)

Parnakra

Legacy Member
Natuurlijk moet je ergens beginnen, maar als je reactie op die simpele beginnersproblemen onmiddellijk naar een forum te gaan zonder zelf eens te googlen is, ben je niet goed bezig.

Obliv`

Legacy Member
voltje zei:
Je moet ergens beginnen he :)
Maar zoiezo DEBUGGEN en ERRORS lezen.
Break points plaatsen en lijn per lijn overlope :)

Om het debuggen wat makkelijker te maken:
CTRL + ALT + E => Break on CLR exceptions

wartaal

Legacy Member
Tis al opgelost. Merci voor de hulp :) Had over iets gekeken dat ik verkeerd geschreven had.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan