Hej alla, Snyggare och bättre är att du skriver ett Data Access Layer (DAL) som kapslar in dina operationer mot databasen, i form av små metoder som ställer SQL frågor och returnerar Dataset/Datareader. Ola, Micke: Hej, tack för tipsen. Tyvärr så är inte mitt internet så snabbt (fel efter åskan, men ska ha 10mbit egentligen men nu 0,01mbit) så laddnings tiden för alla sidor är cirka 5 min tyvärr och då har jag inte gått in på länkarna ni skrev... Hej igen, finns det någon lösning så man kan använda dll-filen i code behind? Det borde väl gå med web.config, men hur? Rent generellt så behöver du inte använda dig av CompilerOptions överhuvudtaget.effektivare lösning?
Min fråga är nu om det finns någon smidigare och bättre kod än denna:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConnectionString As String = "Driver={MySQL ODBC 3.51 Driver};Server=db.domän.net;Port=3306;Option=131072;Stmt=;Database=databas;Uid=användare;Pwd=lösenord;"
Dim strSQL As String = "SELECT namn, epost FROM testdata ORDER BY uID DESC"
Dim objConn As New OdbcConnection(strConnectionString)
Dim objCmd As New OdbcDataAdapter(strSQL, objConn)
Dim ds As DataSet = New DataSet
objCmd.Fill(ds, "testdata")
DataGrid1.DataSource = ds.Tables("testdata").DefaultView
DataGrid1.DataBind()
Sedan så kan jag ju passa på att fråga en till fråga :)
Jag använder det s.k. webmatrix sättet till den koden men vill använda en code behind-fil men hur ska jag göra med detta: ? (med dll-filen)
<code>
<%@ Page Language="VB" Debug="True" CompilerOptions='/R:"C:\Program Files\Microsoft.NET\Odbc.Net\Microsoft.Data.Odbc.dll"' %>
</code>
// Micke Å
Sv: effektivare lösning?
Läs mer om det här:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadonet/html/wriportap2.asp
Där finns även beskrivet hur du lägger in din Connectionstring i web.config filen, som jag också rekommenderar att du gör..
se även Data Access Application Block for .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.aspSv: effektivare lösning?
Som en liten instickare .. du kan använda < url: www.pellesoft.se > utan mellanslag så blick länkarna klickbara direkt. Precis på samma sätt kan du använda < code c# > utan mellanslag, samt byta ut c# mot en lång lista (t.ex sql, xml, html, vb, java etc) för att färgkoda kodsnuttar.
Tänkte det kunde vara bra att veta =)Sv: effektivare lösning?
Du du vill skriva så lite kod som möjligt, alltså göra om din kod mindre, så kan du utelämna connection objetket:
<code>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConnectionString As String = "Driver={MySQL ODBC 3.51 Driver};Server=db.domän.net;Port=3306;Option=131072;Stmt=;Database=databas;Uid=användare;Pwd=lösenord;"
Dim strSQL As String = "SELECT namn, epost FROM testdata ORDER BY uID DESC"
Dim objCmd As New OdbcDataAdapter(strSQL, strConnectionString)
Dim ds As DataSet = New DataSet
objCmd.Fill(ds, "testdata")
DataGrid1.DataSource = ds.Tables("testdata").DefaultView
DataGrid1.DataBind()
</code>
/Fredrik Normén NSQUARED2
http://normen.mine.nu/myblogSv: effektivare lösning?
Men finns det någon vettig lösning på att ha Odbc.dll länken i din code behind-fil?
<%@ Page Language="VB" Debug="True" CompilerOptions='/R:"C:\Program Files\Microsoft.NET\Odbc.Net\Microsoft.Data.Odbc.dll"' %>
// Micke
Sv: effektivare lösning?
// MikaelSv: effektivare lösning?
Nu beror det på vilket version av ramverket du kör.
Kör du v1.0 så använder man Microsoft.Data.Odbc.dll
Den filen behöver ligga i /bin foldern för applicationens root
För att använda sig av OdbcConnection, OdbcCommand osv så behöver du "importera" det namespacet så här (.aspx-fil):
<code>
<%@ Page Language="VB" Debug="True" %>
<%@ import Namespace="Microsoft.Data.Odbc" %>
<script runat="server">
Public Sub Page_Load(Sender As object, E As EventArgs)
Dim _cnn As New OdbcCommand("my-conn-string")
'## -- osv ... --
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
</form>
</body>
</html>
</code>
Kör du v1.1 av ramverket så använder man sig av System.Odbc.Data ("samma som Microsoft.Data.Odbc.dll", fast nu är det "inbyggt" i ramverket, dvs du behöver inte lägga till någon extra dll-fil i din /bin folder):
<code>
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data.Odbc" %>
<script runat="server">
Public Sub Page_Load(Sender As object, E As EventArgs)
Dim _cnn As New OdbcCommand("my-conn-string")
'## -- osv ... --
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
</form>
</body>
</html>
</code>
Nu är inget av ovanstående sätt att rekomendera.
Du kan ju själv bygga en class i din .vb-fil och sedan kompilera den till en dll:
<code>
Imports System
Imports System.Data
Imports Microsoft.Data.Odbc
Namespace MyUserSpace
Public Class MyUser
Private _userId As Integer
Private _username As String
Public Property UserID() As Integer
Get
Return _userId
End Get
Set(ByVal Value As Integer)
_userId = Value
End Set
End Property
Public Property Username() As String
Get
Return _username
End Get
Set(ByVal Value As String)
_username = Value
End Set
End Property
Public Sub New()
End Sub
End Class
Public MyUserManager
Private _connString As String
Public Property ConnectionString() As String
Get
Return _connString
End Get
Set(ByVal Value As String)
_connString = Value
End Set
End Property
Public Sub New()
End Property
Public Function GetUserById(ByVal id As Integer) As MyUser
Dim _cnn As New OdbcConnection(ConnectionString)
Dim _cmd As New OdbcCommand("", _cnn)
Dim _queryUser As String = "SELECT UserID, Username FROM Users WHERE UserID = ?"
Dim _readUser As OdbcDataReader
Dim _user As New MyUser
_cmd.CommandText = _queryUser
Dim _paramUserID As New OdbcParameter("@UserID", DbType.Int32)
_paramUserID.Value = id
_cmd.Parameters.Add(_paramUserID)
_cmd.Connection.Open()
_readUser = _cmd.ExecuteReader(CommandBehavior.CloseConnection)
If _readUser.Read() Then
_user.UserID = _readUser("UserID")
_user.Useranme = _readUser("Username")
End If
_cmd.Connection.Close
Return _user
End Function
End Class
End Namespace
</code>
För v1.1 av ramverket ändrar du bara Microsoft.Data.Odbc till System.Data.Odbc
Kompilera sedan koden och lägg dll-filen i din apps /bin folder
På aspx-sidan (alt. codebehind, fast det är knöligt med WebMatrix):
<code>
<%@ Page Language="VB" %>
<%@ import Namespace="MyUserSpace" %>
<script runat="server">
Public Sub Page_Load(Sender As object, E As EventArgs)
Dim _userMan As New MyUserManager()
_userMan.ConnectionString = "min-conn-string"
Dim _user As MyUser = _userMan.GetUserById(1)
'## -- osv ... --
End Sub
</script>
<html>
<head>
</head>
<body>
<form runat="server">
</form>
</body>
</html>
</code>
Nu är ovanstående kod INTE testkörd ... bara skriven så där rakt-upp-och-ned ;)
mycket enkla exempel, säkert "fel-tänk" vad gäller lager ... men där kan man diskutera mycket om hur manska bygga upp saker och ting....men du är en bit på väg ifrån "CompilerOptions blahahahfhahah"
cya,
/PatrikB