webForumDet fria alternativet

Arv

12 svar · 477 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

Jag håller som bekant på med Databasclasser och tror jag kommit till DataAccessskitet där jag ska ärva lite metoder men då undrar jag hur jag ska skriva för att min ConnenctionString ska ärvas automatiskt. Eller Jag ska fråga om det går för det första??

Jag har kommit hit

[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		[b]//Raden nedanför vill jag ska ärvas in i Icaaq.Data.DataAccess[/b]
		string Connection = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxx\xxx.mdb";
		
		public DateTime RetriveNewsDate()
		{
            
		}
	}
}
[/red]

mvh icaaq
[redigerade bort private då jag inte tror att den ska vara där [/redigerat]
[redigerade igen]Förstås ska det vara en Connection [/redigerade igen]

nikoMedlem sedan juni 20022 599 inlägg
#2

Medlemsvariabeln ärvs oavsett om du skriver private, protected eller public.

Skillnaden blir:

Private: Den ärvs men du kan inte explicit referera till den i nya eller overridade metoder i dina ärvda klasser.

Protected: Den ärvs och du kan referera till den i dina ärvda klasser (men inte utanför).

Public: Den ärvs och du kan referera till den i dina ärvda klasser (och utanför via punknotation).

Jag skulle tro att det är protected du är ute efter.

Däremot så tänker du väl inte hårdkoda själva strängen? Det är bättre att tilldela den via en property eller publik metod (eller i konstruktorn).

icaaqMedlem sedan okt. 20005 273 inlägg
#3

Jag tänkte ange den i konstruktorn. Det ser ut så här nu

[red]using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		//Här nedanför vet jag inte vad jag ska skriva
		string Connection = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxx\xxx.mdb";
		
		public DateTime RetriveNewsDate()
		{
            
		}
	}
}
[/red]

och den ärvda

[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Icaaq.Data
{
	/// <summary>
	/// Summary description for OleDbData.
	/// </summary>
	public abstract class OleDbData
	{
		protected OleDbConnection Connection;
		/// <summary>
		/// A valid connectionstring
		/// </summary>
		/// <param name="ConnectionString"></param>
		public OleDbData(string ConnectionString)
		{
			Connection = new OleDbConnection(ConnectionString);
		}
[/red]

mvh icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#4

Jag måste läsa lite mer om detta med arv..... jag återkommer till er när jag vet mer :OO

Men vill ni hjälpa till så är det bara att posta vidare

mvh icaaq

nikoMedlem sedan juni 20022 599 inlägg
#5

Ja, fast nu förstår jag inte riktigt. I din basklass så är ju Connection av typen string och i din ärvda klass är den definierad som OleDbConnection. Om du gör så så omdefinierar du ju medlemsvariabeln.

Om du avser att använda samma medlemsvariabel i din ärvda klass så ska du inte deklarera om den. Den kommer att vara tillgänglig ändå om den är deklarerad som tex protected i basklassen.

RED. OK. Såg inte att du svarat emellan.

icaaqMedlem sedan okt. 20005 273 inlägg
#6

icaaq skrev:

//Här nedanför vet jag inte vad jag ska skriva

;)

*testar vidare*

h0lgerMedlem sedan nov. 2002105 inlägg
#7

Lägg connectionstringen i en konfig fil istället. Då slipper du kompilera om den dagen du byter inloggningsid eller db etc.

I din generella db-klass som du ärver in i de andra db-klasserna skapar du en property som sätter connection-stringen genom att läsa upp strängen från config filern.

icaaqMedlem sedan okt. 20005 273 inlägg
#8

ok.....

icaaqMedlem sedan okt. 20005 273 inlägg
#9

i test syfte har jag fortsatt med detta och kommit så här långt

[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		public DataAccess() : base(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxxxxx")
		{}
		
		public DateTime RetriveNewsDate()
		{
			string SqlStatement = "SELECT TOP 1 f_date FROM news ORDER BY pk_id DESC";
			OleDbDataReader DataReader = RetriveDataReader(SqlStatement);
			if(DataReader.Read())
			{
				DateTime newsDate = (DateTime)DataReader["f_date"];
				DataReader.Close();
				return newsDate;
			}
			else
			{
				return DateTime.Now;
			}
		}
	}
}
[/red]

Sen har jag denna class som ska hämta RetriveNewsDate men det är här jag inte får till det

[red]
using System;
using Meditrix.DataAccess;

namespace Meditrix.Business
{
	/// <summary>
	/// Summary description for news.
	/// </summary>
	public class news
	{
		private DateTime _newsDate = DataAccess.RetriveNewsContent;

		public news()
		{
			//
			// TODO: Add constructor logic here
			//
		}
	}
}
[/red]

Jag tänkte alltså i köra RetriveNewsDate men polleten rammlar inte ner.....hur ska jag göra

mvh icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#10

Måste tänka om lite........brb

h0lgerMedlem sedan nov. 2002105 inlägg
#11

Du har en metod i din db klass som heter

RetriveNewsDate

Men i koden anropar du

DataAccess.RetriveNewsContent

Kan det ha med detta att göra?

icaaqMedlem sedan okt. 20005 273 inlägg
#12

Nej ....det är jag som blandat ihop kodbitarna här på wF bara...

h0lgerMedlem sedan nov. 2002105 inlägg
#13

Jag har ett vb exempel på hur jag tänker. Nu har jag grejat lite i det utan att testa det helt men jag tror att ni kan se mina tankar där.

Bygger på 2 assemblys. En för presentations skiktet och en för business och dataaccess skikten. Egentligen bör dataaccess skiktet ligga i en egen assembly.

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