Avatar billede websam Nybegynder
11. marts 2006 - 16:40 Der er 24 kommentarer og
1 løsning

Type 'LoadReader' is not defined

Jeg har en metode i min klasse :

    Private Function LoadReader()
        '--- Vælger hvilken reader der skal benyttes ud fra hvilken client der valgt, Eks. System.Data.SqlClient
    End Function

Den prøver jeg så at kalde i en anden metode i samme klasse :

    Public Function FindAll()
        Dim Dr As LoadReader = Db.ExecuteReader
    End Function

Men jeg får fejlen :

    Type 'LoadReader' is not defined

Hvad sker der lige der ?

/Websam
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 16:46 #1
Du skal f.eks bruge
i c#
Private SqlDataReader LoadReader()
{
SqlDataReader r = new SqlDataReader()
return r;
}
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 16:46 #2
Du skal have en type på
Avatar billede websam Nybegynder
11. marts 2006 - 16:54 #3
Ok hele senariet ser således ud :

Private _Sql As SqlDataReader
Private _OleDb As OleDbDataReader
Private _Odbc As OdbcDataReader
Private _Oracle As OracleDataReader

'--- Function der loader datareader afhænnigt af databasevalg
Private Function LoadReader()
    Dim Client As String = ConfigurationManager.ConnectionStrings("ConnectionString").ProviderName
    Select Case Client
        Case "System.Data.SqlClient"
            LoadReader = _Sql
        Case "System.Data.OleDb"
            LoadReader = _OleDb
        Case "System.Data.OracleClient"
            LoadReader = _Oracle
        Case "System.Data.Odbc"
            LoadReader = _Odbc
        Case Else
            LoadReader = Nothing
    End Select
End Function

Altså skal den vælge den rigtige client afhænnigt af hvilken der er sat i min config fil ?

/Websam
Avatar billede websam Nybegynder
11. marts 2006 - 16:55 #4
Oversat til C# ser det vist nogenlunde således ud :

private SqlDataReader _Sql;
private OleDbDataReader _OleDb;
private OdbcDataReader _Odbc;
private OracleDataReader _Oracle;

private object LoadReader()
{
string Client = ConfigurationManager.ConnectionStrings("ConnectionString").ProviderName;
if (Client == "System.Data.SqlClient") {
  LoadReader = _Sql;
} else if (Client == "System.Data.OleDb") {
  LoadReader = _OleDb;
} else if (Client == "System.Data.OracleClient") {
  LoadReader = _Oracle;
} else if (Client == "System.Data.Odbc") {
  LoadReader = _Odbc;
} else {
  LoadReader = null;
}
}
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 17:06 #5
hvor definerer du loadreader ?
lige nu har du en function som ikke returnere noget.
Avatar billede websam Nybegynder
11. marts 2006 - 17:11 #6
Det er jo lige det der er problemet og det jeg skal have en smule hjælp til ;o)

Planen var jo at jeg bare skulle kunne køre det hele ved at skrive :

VB
Dim Dr As LoadReader = _Db.ExecuteReader(Sql)

C#
LoadReader Dr = _Db.ExecuteReader(Sql);

Så jeg ikke skal ud i noget med forskellige data klasser for at skifte database.
Avatar billede websam Nybegynder
11. marts 2006 - 17:14 #7
Altså at den reader jeg skal bruge bestemmes udfra ProviderName i min config fil så når jeg kalder metoden LoadReader er den klar over hvilken reader der skal anvendes.
Avatar billede websam Nybegynder
11. marts 2006 - 17:16 #8
Og det er slet ikke udelukket at det skal laves på en helt anden måde, men jeg er selvfølgelig åben for alle foreslag.
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 17:23 #9
du skal ihvertifald have

private SqlDataReader _Sql = new SqlDataReader();
private OleDbDataReader _OleDb = OleDbDataReader ();
osv
Avatar billede websam Nybegynder
11. marts 2006 - 17:27 #10
Det har jeg oxo prøvet men så får jeg denne fejl :

    Type 'System.Data.SqlClient.SqlDataReader' has no constructors.

Så det hjælper ikke meget.
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 17:27 #11
jeg er dog ikke sikker på at du kan gøre det du gerne vil.

Måske kan du gøre det på denne måde:

www.c-sharpcorner.com/Code/2002/July/GenericDataProvider.asp+c%23+generic+datareader&hl=da&gl=dk&ct=clnk&cd=2&client=firefox-a" target="_blank">http://72.14.207.104/search?q=cache:j65ZeIWFV5IJ:www.c-sharpcorner.com/Code/2002/July/GenericDataProvider.asp+c%23+generic+datareader&hl=da&gl=dk&ct=clnk&cd=2&client=firefox-a
Avatar billede websam Nybegynder
11. marts 2006 - 17:33 #12
Min database hjælpe klasse er der styr på jeg mangler bare muligheden for at kunne vælge datareaderen ud fra config filen i min data klasse. Men hvis du mener det ikke er muligt må jeg finde en anden løsning ;o)

/Websam
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 17:55 #13
du kan gøre det på denne måde:

private SqlDataReader r;
    protected void Page_Load(object sender, EventArgs e)
    {   
   
    LoadReader().
    }

    private IDataReader LoadReader()
    {

        return r;
    }

du skal bare returnere den reader du vil bruge
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 18:03 #14
du får altså
LoadReader() = _Db.ExecuteReader(Sql);
Avatar billede websam Nybegynder
11. marts 2006 - 18:08 #15
Og når det så ikke er i min code behind at jeg bruger dette men i min data klasse så skal jeg vel bare bruge en default constructor ?

VB
Public Sub New()
    LoadReader
End Sub

C#
public En_Klasse()
{
LoadReader;
}

Men hvor kommer så valget ind fra min config fil ?

/Websam
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 18:13 #16
du bruger den på denne måde:
private SqlDataReader _Sql;
private OleDbDataReader _OleDb;
private OdbcDataReader _Odbc;
private OracleDataReader _Oracle;

private IDataReader LoadReader()
{
string Client = ConfigurationManager.ConnectionStrings("ConnectionString").ProviderName;
if (Client == "System.Data.SqlClient") {
  return _Sql;
} else if (Client == "System.Data.OleDb") {
  return  _OleDb;
} else if (Client == "System.Data.OracleClient") {
  return  _Oracle;
} else if (Client == "System.Data.Odbc") {
  return  _Odbc;
} else {
  return  null;
}
Avatar billede websam Nybegynder
11. marts 2006 - 18:22 #17
og så giver det stadigt den samme fejl :

    Type 'LoadReader' is not defined

Udfra dette :

VB
Private _Sql As SqlDataReader
Private _OleDb As OleDbDataReader
Private _Odbc As OdbcDataReader
Private _Oracle As OracleDataReader

Public Sub New()
    LoadReader()
End Sub

'--- Function der loader datareader afhænnigt af databasevalg
Private Function LoadReader() As IDataReader
    Dim Client As String = ConfigurationManager.ConnectionStrings("ConnectionString").ProviderName
    Select Case Client
        Case "System.Data.SqlClient"
            Return _Sql
        Case "System.Data.OleDb"
            Return _OleDb
        Case "System.Data.OracleClient"
            Return _Oracle
        Case "System.Data.Odbc"
            Return _Odbc
        Case Else
            Return Nothing
    End Select
End Function

C#
private SqlDataReader _Sql;
private OleDbDataReader _OleDb;
private OdbcDataReader _Odbc;
private OracleDataReader _Oracle;

public En_Klasse()
{
LoadReader();
}

private IDataReader LoadReader()
{
string Client = ConfigurationManager.ConnectionStrings("ConnectionString").ProviderName;
if (Client == "System.Data.SqlClient") {
  return _Sql;
} else if (Client == "System.Data.OleDb") {
  return _OleDb;
} else if (Client == "System.Data.OracleClient") {
  return _Oracle;
} else if (Client == "System.Data.Odbc") {
  return _Odbc;
} else {
  return null;
}
}
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 18:35 #18
dette virker i c#

using System;
using System.Data;
using System.Data.OleDb;
using System.Data.Odbc;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    private SqlDataReader _Sql;
    private OleDbDataReader _OleDb;
    private OdbcDataReader _Odbc;
    public Class1()
    {
        //
        // TODO: Add constructor logic here
        //
        LoadReader();
    }
    public IDataReader LoadReader()
    {
        string Client = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
        if (Client == "System.Data.SqlClient")
        {
            return _Sql;
        }
        else if (Client == "System.Data.OleDb")
        {
            return _OleDb;
        }
        else if (Client == "System.Data.Odbc")
        {
            return _Odbc;
        }
        else
        {
            return null;
        }
    }
}
Avatar billede websam Nybegynder
11. marts 2006 - 19:11 #19
Det er det samme kode som jeg har bare i VB istedet, men når jeg så laver :

VB
Public Function FindAll()
    Dim Dr As LoadReader _Db.ExecuteReader
    '--- Og en masse anden kode
End Function

C#
public object FindAll()
{
    LoadReader Dr = _Db.ExecuteReader;
    // Og en masse anden kode
}

Ja så får jeg den iriterende fejl igen :

    Type 'LoadReader' is not defined

I denne linie :

    VB
    Dim Dr As LoadReader _Db.ExecuteReader

    C#
    LoadReader Dr = _Db.ExecuteReader;

Altså først når jeg kalder den ?

/Websam
Avatar billede websam Nybegynder
11. marts 2006 - 20:40 #20
Ok smid et svar og tak for indsatsen ;o)

/Websam
Avatar billede dr_chaos Nybegynder
11. marts 2006 - 20:56 #21
fik du det til at virke ?
Avatar billede websam Nybegynder
11. marts 2006 - 21:05 #22
Nej det køre ikke så jeg må skifte de readere ud ved database skift.
Avatar billede dr_chaos Nybegynder
12. marts 2006 - 09:15 #23
du kan lave det som en property:

using System;
using System.Data;
using System.Data.OleDb;
using System.Data.Odbc;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    private SqlDataReader _Sql;
    private OleDbDataReader _OleDb;
    private OdbcDataReader _Odbc;
    public Class1()
    {
        //
        // TODO: Add constructor logic here
        //
        LoadReader();
    }
    public IDataReader LoadReader
    {
  get{    string Client = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
        if (Client == "System.Data.SqlClient")
        {
            return _Sql;
        }
        else if (Client == "System.Data.OleDb")
        {
            return _OleDb;
        }
        else if (Client == "System.Data.Odbc")
        {
            return _Odbc;
        }
        else
        {
            return null;
        }
}
    }
}
Avatar billede dr_chaos Nybegynder
12. marts 2006 - 09:17 #24
må blive
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.Odbc;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    private IDataReader loadreader;
    private SqlDataReader _Sql;
    private OleDbDataReader _OleDb;
    private OdbcDataReader _Odbc;
    public Class1()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    public IDataReader LoadReader
    {
        get
        {
            string Client = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;
            if (Client == "System.Data.SqlClient")
            {
                loadreader= _Sql;
            }
            else if (Client == "System.Data.OleDb")
            {
                loadreader = _OleDb;
            }
            else if (Client == "System.Data.Odbc")
            {
                loadreader = _Odbc;
            }
            else
            {
                loadreader = null;
            }
            return loadreader;
        }
    }
}
Avatar billede snepnet Nybegynder
12. marts 2006 - 17:04 #25
hvis du alligevel er gået over til 2.0 - kunne du udnytte denne her:

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
så kan du få diverse via DbProviderFactory objektet - f.eks.:

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = "...";

osv...

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Netcompany A/S

IT Consultant

Unik System Design A/S

Agile QA Lead

Epona A/S

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-supporterelever til Lokal IT på Antvorskov Kaserne