Jag har en namespace som heter LLdataAccess, den ser ut något så här, denna är kompilerad till en dll
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Xml
Imports Microsoft.visualbasic
Namespace LL.DataAccess
Public Class dataAccessLayer
Massa funktion här i detta namespace
End Class
End Namespace
Nu har jag en annan .vb fil som jag ska kompilera, denna vb innehåller ett namespace som heter LLDataLayerForum, den ser ut typ så här
Namespace LL.DataLayerForum
Public Class businessDataLayerForums
Inherits dataAccessLayer
Massa funktion
End Class
End Namespace
Den ärver alltså från klassen dataAccessLayer som jag kompilerade till en dll med ett namespace i koden jag postade överst.
Min fråga är då följande. I min första klass/namespace/dll (den är ju alla 3) importerar jag namespaces som Imports System,Imports System.Data,Imports System.Data.SqlClient etc. Dessa behöver jag använda i min andra klass/namespace/dll men behöver jag då importera dessa i denna också. Då den ärver från dataAccessLayer. Då jag inte använder v.studio ännu måste jag lära mig detta förhand :)
Kanske lite luddigt förklarat ovan. Jag har inte riktigt hajjat när och hur man ska importera namespaces man behöver använda i sina dller.
Låt oss säga så här.
1. Jag har en databasklass som ligger i en dll, i denna finns då ett namespace som heter LL.DataAccess, för att denna ska fungera måste jag inkludera följande namespace
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Xml
2. Jag har sedan en ny dll, i denna dll ligger ett namespace som heter LL.ForumDataAccess, för att denna ska fungera måste jag importera:
Måste jag då alltså importera alla andra namespaces jag behöver i detta lager eller räcker det om jag importerar LL.DataAccess, den i sin tur har ju alla namespaces jag behöver importerade. Denna dll ärver ju från klassen i LL.DataAccess. Alla förklaringar är välkommna :)
Imports är bara till för att du ska kunna använda korta klassnamn (tex XmlDocument istället för System.Xml.XmlDocument) i filen. Det har inget med arv eller länkning att göra.
Ok nu försöker jag kompilera den andra dll:en, den använder funktioner som finns i dllen/namespacet/klassen den ärver ifrån. I första dllen/namespacet/klassen finns bland annat en funktion som ser ut på detta sätt
Public Function ExecuteNonQuery(strSQL As String)
Try
objCnn.Open()
Dim SqlCommand as SqlCommand = CreateSQLCommand(strSQL)
SqlCommand.ExecuteNonQuery()
Catch Exp As SqlException
Throw(Exp)
Finally
objCnn.Close()
objCnn.Dispose()
objCnn = Nothing
End Try
End Function
i den .vb filen jag försöker kompilera nu anropar jag funktionen ovan på följande sätt.
Public Function UpdateTopicLastPost(TopicId As Integer)
Dim strSQL As String = String.Format("UPDATE LL_forumTopics SET TopicLastReplyDate = GetDate() WHERE Pk_TopicId = "& TopicId &"")
ExecuteNonQuery(strSQL)
End Function
Det första namespacet heter LL.DataAccess, den ligger i dll filen LL_DataAccess.dll och i en klass som heter dataAccessLayer, det namespacet jag ska kompilera till en dll heter LL.DataLayerForum. Nu försöker jag kompilera den och skickar med bland annat /r:LL_DataAccess.dll som är dllen som namespacet den importerar ligger i. Men jag får meddlande funktionerna i .vb filen som anropar namespacet LL.DataAccess inte är deklarerade. River snart mitt hår :(
Jag använder den första dllen/namespacet på sidor och det fungerar, varför fungerar det inte att kompilera en annan .vb fil som använder sig av den. Hur skriver jag i vbc för att anropa min första dll när jag kompilerar min andra. Det verkar inte fungera med /r:LL_DataAccess.dll som sagt..
Tack men..Tänkte på det också. Men det jag inte hajjar är att det fungerar om jag har det typ så här.
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration " %>
<%@ Import Namespace="System.Xml " %>
<%@ Import Namespace=" LL.DataAccess" %>
<script runat="server" language="VB">
'Detta är klassen jag försöker kompilera till ett namespace som heter
Public Class ForumDataAccess
Inherits dataAccessLayer '(klassen i LL.DataAccess)
Public Function UpdateTopicLastPost(TopicId As Integer)
Dim strSQL As String = String.Format("UPDATE bla bla WHERE Pk_TopicId = "& TopicId &"")
ExecuteNonQuery(strSQL)
End Function
End Class
</script>
så fungerar det ju, då behöver jag inte skapa en ny instans av klassen dataAccessLayer när jag anropar funktioner i ForumDataAccess ifrån mitt affärslager. Vad är det som jag inte hajjat.