Jag vill koppla upp min applikation till en databas somligger på min D:\Mydb.mdb. Hej, först - har du någon sqlserver installerad eller har du bara en mdb-fil att arbeta med? Eftersom det är en mdb-fil antar jag att det är Access du jobbar med. Då ska du inte använda en SqlDataSource utan en OleDbDataSource (eller AccessDataSource i VS2008). Hmm, var nog för trött där - klart det är en access hon pratar om ;) Hej Elisabeth Med all respekt för den extra ledigheten och med risk för att låta en aning tjurig så skulle ändå någon form av response uppskattas... Jag forsöker att förstå din fina koden, jag är inte bra på vb. Undra om din kod kan göras inom Oledbdatasource kan användas inom aspnet? jag menar på det sättet? Kolla här: tack för tipset men i Data source skriver på min path var min db finns, men i initial catalog=northwind??? måste jag skapa en webconfig fil? Hej igen Elisabeth, äntligen fick jag lite response från dig...=)connect databas ASP.NET
När jag kör programmet får jag följande meddelande:
"An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005,
this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections.
(provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) "
Undrar var ligger felet.
koden:
<asp:SqlDataSource
ID="testSqlDataSource"
runat="server"
ConnectionString="Data Source=D:\\Mydatabase;"//problemet ligger här????
SelectCommand="SELECT * FROM Lista"
>
</asp:SqlDataSource>
<asp:GridView
ID="GridView1"
runat="server"
Style="z-index: 104; left: 387px; position: absolute;top: 321px"
DataSourceID="testSqlDataSource"
>
</asp:GridView>
...
Sen ska jag koppla en server till nåt webhotell vilket kan ni rekommendera?
Mvh Lisa
Sv: connect databas ASP.NET
din connectionstring borde se ut såhär:
data source=localhost; initial catalog=testSqlDataSource; integrated security=true;
eller istället för integrated security om du inte vill logga in med det inbyggda aspnet-kontot utan sätta upp ett eget i databasen, eller ansluta mot en databas som inte ligger på din server - dvs de flesta hotell. Då skriver du:
data source=10.11.12.13; initial catalog=testSqlDataSource;user id=kalle;password=anka;
data source= ipadressen där sql servern finns
initial catalog = vad databasen heter, finns flera - northwind tex
user id= ett användarnamn du skapar på sqlservern för den specifika databasen
password, likaså
Obs, om du loggar in med username och password och det är en ny sql-installation så måste man ställa om den i mixed-mode. Detta innebär att man kan välja om man skall kunna logga in med integrated security, eller vanligt användarkonto.
Fråga gärna mer om du behöver tydligare svarSv: connect databas ASP.NET
/JohanSv:connect databas ASP.NET
Sv: connect databas ASP.NET
Det finns några olika tekniker då du skall koppla dig mot en databas. Antingen deklarerar du din koppling varje gång du skall hämta/skriva från/till din databas eller så skapar du en klass som där du deklarerar din koppling osv sedan skapar du klasser som ärver din kopplings-klass och sedan ställer du dina frågor där. Den sistnämnda tekniken använder jag då jag finner det smidigare. Det kanske känns mer koplicerat men i långa loppet så tror jag att det är det bästa. Jag skall försöka förklara.
Om vi tittat på det första så skulle en koppling mot en Access databas som du använder kunna se ut på följande sätt. Eftersom jag behärskar VB bäst så får exemplet bli i detta språk, hoppas att det är ok.
Vi tänker oss att vi vill binda en datakontroll i detta fall en repeter (skulle givetvis kunna vara en gridview eller något liknande). Vi vill binda denna kontroll vid page,load. Detta blir enlig:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Koppling till din databas
Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("./DB/DinDatabas.mdb") & ";"
Dim srtSQL As String = "SELECT * FROM DinTabel "
Dim MyConn As New Data.OleDb.OleDbConnection(strConn)
Dim Cmd As New Data.OleDb.OleDbCommand(srtSQL, MyConn)
MyConn.Open()
DinRepeater.DataSource = Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)
DinRepeater.DataBind()
End Sub
Detta binder din Repeater med allt från DinTabell. Nackdelen som jag ser det är att du måste deklarera samma sak nästa gång vid en annan händelse tex vid en Button eller dyligt. Chansen finns att du glömmer att stänga din koppling vilket aldrig är bra.
Därför tänker jag också visa den teknik som jag använder dvs med klasserna. Det första jag gör är att skapa mig en klass som tar hand om själva "kopplingen". Den kan vi kalla för cAccessConn och ser ut på följande sett:
Imports Microsoft.VisualBasic
Imports System.Data
Public Class cAccessConn
Private AccessConn As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & HttpContext.Current.Server.MapPath("./DB/DinDatabas.mdb") & "; Mode=ReadWrite;")
Private ads As New DataSet
Private ada As New OleDb.OleDbDataAdapter
Private aSqlStr As String
Protected ReadOnly Property Con() As OleDb.OleDbConnection
Get
Return AccessConn
End Get
End Property
Public ReadOnly Property ds() As DataSet
Get
Return ads
End Get
End Property
Public Property SqlStr() As String
Get
Return aSqlStr
End Get
Set(ByVal Value As String)
aSqlStr = Value
End Set
End Property
Public Sub Dispose()
AccessConn.Dispose()
ads.Dispose()
ada.Dispose()
End Sub
Public Sub Fill()
Dim Command As New OleDb.OleDbCommand
Command.CommandText = SqlStr
Command.Connection = AccessConn
ada.SelectCommand = Command
AccessConn.Open()
ada.Fill(ds)
AccessConn.Close()
End Sub
Protected Sub ExecNoQuery(ByVal sp As OleDb.OleDbCommand)
AccessConn.Open()
sp.ExecuteNonQuery()
AccessConn.Close()
End Sub
End Class
Jag tänker inte gå in på det något djupare men som du ser så deklarerar jag ett dataset, en dataadapter samt min sql sträng.
Nästa steg är att skapa en eller flera klasser som tar hand om alla de frågor som du vill göra mot din Accessdatabas. Jag har som regel att jag skapar en klass för varje tabell som jag har i den databas som jag jobbar med.
Vi tänker oss att vi har en Repeater på en sida som kommer att hämta senaste nytt som finns i vår databas. Således tänker vi oss att vi har en tabell som vi kallar News. Som jag sa så har jag som en tummregel att en tabell i min databas är en klass. Därför skapar vi oss en klass som heter cNews enlig:
Public Class cNews
Inherits cAccessConn
Public Sub GetAllNews()
SqlStr = " SELECT Datum, Meddelande " & _
" FROM News " & _
" ORDER BY Datum DESC"
Fill()
End Sub
End Class
Lägg märke till att jag ärver våran databasklass, Inherit cAccessConn. Detta för att jag vill komma åt denna klassens innehåll, tex Fill()
Då var det bara en sak kvar och det är i code behind för att binda den Repeater vi har på sidan.
Jag skaper en sub under PageLoad som jag kallar LoadNews(). LoadNews ser ut på följande sätt:
Public Sub LoadNews()
Dim objMessage As New cNews
objMessage.GetAllNews()
MyRepeater.DataSource = objMessage.ds
MyRepeater.DataBind()
MyRepeater.Dispose()
End Sub
Här deklarerar jag ett objekt av våran nyskapade klass cNews. Genom detta så kommer jag med hjälp av punktnotation åt de funktioner i klassen. Du kan se att med hjälp av vårt objekt kommer åt GetAllNews dvs den sub vi skapade i våran cNews klass.
Som sagt två tillvägagångssätt och jag vet inte vilket du kännner mest för. Jag gissar att den sista tekninken kan kännas lite invecklad och knölig. Men jag lover att du kommer att tycka den är smidigast, särskillt om du har måga frågor mot din databas.
Hoppas att det inte ställer till det allt för mycket då detta är VB.
Lycka till!
Mvh,
Thomas
Sv:connect databas ASP.NET
Mvh,
ThomasSv: connect databas ASP.NET
<asp:...
...
...
/asp:...>
ifall jag inte vill använda det i funktioner
Tack Sv: connect databas ASP.NET
<asp:...
Oledbconnectio c = OledbCone...()
/asp...>Sv:connect databas ASP.NET
http://www.dotnetjohn.com/articles.aspx?articleid=3
och här:
http://www.connectionstrings.com/
//AnnSv: connect databas ASP.NET
tackSv:connect databas ASP.NET
Jag menar inte att jaga på dig och jag ber om ursäkt om det tolkades så. Det är bara att flagga upp om det är något du inte är med på så går vi igenom det på nytt. Jag vet att mitt svar var tämligen långt och kanske uppfattades som mer krångligt än hjälpande lite beroende på tidigare erfarenhet.
Som sagt det finns många sätt att koppla sig mot databaser mycket beroende på vilken typ av databas man skall använda och jag skall villigt erkänna att även mina kunskaper är något begränsade då det gäller olika typer av databaser. Men då det gäller Acccess, som är fallet hos dig, så anser jag mig har de kunskaper som krävs för att klara mig.
Som sagt, kul att du skrev igen och jag skall gör allt jag kan för att ta dig vidare. Dock är jag lite osäker på vad du menar med dina frågor. Är det så att du behärskar C# eller något annat språk bättre än VB så det hela kanske blir en smula krångligt.
Så här är det bara du som kan bestämma om vi skall gå vidare. Jag hjälper dig givetvis i den mån jag kan men då är jag rädd att det blir i VB.
Så skriv lite hur du känner och är det så att vi skall kör vidare så får du gärna beskriva lite mer om det du är osäker på så tar vi det från det.
Angående de inlägg som kommit efter min efterlysning på response...=) så är det bra länkar som Ann gav dig. Dock har den sistnämnda länken bara exempel på lokal sökväg till databas vilken givetvis inte skulle fungera om du skulle tanka upp ditt projekt på en server för publicering (som du också efterlyste om jag förstod dig rätt?!). Som sökväg bör man enligt mig alltid köra med Server.MapPath.
Det pratades också om web.config. Visst skall man sträva efter att ha en web.config då mycket styrs genom denna fil (i vissa fall koppling till sin databas). Men i mitt exempel behövs inte en web.config för att styra kopplingen mot din Access databas.
Mer om allt detta tar vi senare då jag vet om du tycker på att vi skall köra vidare.
(Men med tanke på att du har satt din tråd som löst så är jag rädd att detta är slutet på detta, eller?!)
Mvh,
Thomas