webForumDet fria alternativet

db koppling

.NETur .NET

58 svar · 1 365 visningar · startad av pellesvenne

pellesvenneMedlem sedan jan. 2002227 inlägg
#1

hejsan jag har precis börjat med asp.net!
jag undrar om det är bra att inkluderar en db koppling med asp.net? vilket är det bästa sättet? ska man lägga db kopplingen i web.config eller global.asax eller nån annanstans?

JonMedlem sedan juli 20011 304 inlägg
#2

web.config är ett mycket bra ställe att lägga den på :)

pellesvenneMedlem sedan jan. 2002227 inlägg
#3

läste om en DAL grej man kunde använda är det bra att använda?
hur lägger man db kopplingen i web.config? är det en funktion som man ska göra?

JonMedlem sedan juli 20011 304 inlägg
#4

Ett DAL är en samling klasser med funktionalitet för att hämta data från databaser. Det är bra att använda men tar lite tid att bygga. Hittar man ett bar exempel eller ett som är fritt att använda är ju det bra men det är ju ännu bättre att bygga själv för att lära sig hur det fungerar.

Men jag rekommenderar dock att börja med något lite mindre om man är nybörjare, som att hämta, lämna och uppdatera lite data från en databas och visa på ett bra sätt i webbläsaren :)

web.config är en helt vanlig textfil i xml-format som du kan redigera i vilken editor som helst. Använder du visual studio.net eller webmatrix är det bara att dubbelklicka på filen som skapas automatiskt vid skapande av nya projekt.
Det du ska lägga till i filen är t.ex denna för en sqlserver (måste modifieras till egna parametrar eller till access eller mysql eller vad man nu använder)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
 <add key="defaultConnectionString" value="Integrated Security=SSPI;Persist Security Info=False;
   User ID=sa;Initial Catalog=northwind;
   Data Source=Datamaskin;Packet Size=4096;
   Workstation ID=Dadtamaskin;" />
		
</appSettings>
<system.web>
... massa settings
</system.web>
</configuration>

Du hämtar värdet med:

using System.Configuration;
string connStr = ConfigurationSettings.AppSettings["defaultConnectionString"];
pellesvenneMedlem sedan jan. 2002227 inlägg
#5

Du hämtar värdet med:

using System.Configuration;
string connStr = ConfigurationSettings.AppSettings["defaultConnectionString"];

ska man anropa det med c sharp eller?

JosefMedlem sedan mars 20023 561 inlägg
#6

DU kan lika gärna hämta det med VB.NET:

imports System.Configuration

Dim connStr As String = ConfigurationSettings.AppSettings("defaultConnectionString")
pellesvenneMedlem sedan jan. 2002227 inlägg
#7

hur kopplar man ihop det?

<%@ Page Language="vb" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">

Function MyQueryMethod() As System.Data.IDataReader
        Dim connectionString As String = "server='(local)'; trusted_connection=true; database='community'"
        Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)

        Dim queryString As String = "SELECT \[medlemmar\].\[anvandarnamn\], \[medlemmar\].\[losenord\] FROM \[medlemmar\]"
        Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
        dbCommand.CommandText = queryString
        dbCommand.Connection = dbConnection

        dbConnection.Open
        Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

        Return dataReader
    End Function


Sub Login_Click(Src As Object, E As EventArgs)

imports System.Configuration

Dim connStr As String = ConfigurationSettings.AppSettings("defaultConnectionString")

If (från databasen) Then

session("anvandarnamn") = "ja"

response.redirect("login.aspx", true)

Else
response.redirect("default.aspx", true)

End If
End Sub

</script>

JosefMedlem sedan mars 20023 561 inlägg
#8
<%@ Page Language="vb" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Configuration" %>
<script runat="server">

Function MyQueryMethod() As System.Data.IDataReader
Dim connectionString As String = ConfigurationSettings.AppSettings("defaultConnectionString")
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)

Dim queryString As String = "SELECT [medlemmar].[anvandarnamn], [medlemmar].[losenord] FROM [medlemmar]"
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection

dbConnection.Open
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

Return dataReader
End Function

Sub Login_Click(Src As Object, E As EventArgs)

If (från databasen) Then

session("anvandarnamn") = "ja"

response.redirect("login.aspx", true)

Else
response.redirect("default.aspx", true)

End If
End Sub
</script>
pellesvenneMedlem sedan jan. 2002227 inlägg
#9

tack hur kontrollerar jag att användarnamn och lösenordet stämmer?

If (från databasen) Then
end if

emissionMedlem sedan dec. 19996 721 inlägg
#10

Det urvalet ska du göra redan när du frågar databasen

Dim queryString As String = "SELECT [medlemmar].[anvandarnamn], [medlemmar].[losenord] FROM [medlemmar] WHERE anvandarnamn=@username AND losenord=@password"
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Parameters.Add("@username",SqlDbType.VarChar).Value=variabel med användarnamnet
dbCommand.Parameters.Add("@password",SqlDbType.VarChar).Value=variabel med lösenordet

if Readern inte returnerar något är inloggningen fel

pellesvenneMedlem sedan jan. 2002227 inlägg
#11

BC30057: Too many arguments to 'Public Overridable Function Add(value As Object) As Integer'.

Function MyQueryMethod() As System.Data.IDataReader
Dim connectionString As String = ConfigurationSettings.AppSettings("defaultConnectionString")
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)

Dim queryString As String = "SELECT [medlemmar].[anvandarnamn], [medlemmar].[losenord] FROM [medlemmar] WHERE anvandarnamn=@username AND losenord=@password"
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Parameters.Add("@username",SqlDbType.VarChar).Value = request.form("anvandarnamn")
dbCommand.Parameters.Add("@password",SqlDbType.VarChar).Value = request.form("losenord")

dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection

dbConnection.Open
Dim dataReader As System.Data.IDataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

Return dataReader
End Function

hur kontrollerar jag Readern?

JosefMedlem sedan mars 20023 561 inlägg
#12

Men du gör det ju ganska krångligt. Gör istället en select count i sql:en. Om du får tillbaka 0 är antingen användarnamnet eller lösenordet fel, får du tillbaka 1 är det korrekt. Om du gör såhär är det bättre att använda .ExecuteScalar() istället för .ExecuteReader() eftersom ExecuteScalar enbart returnerar det första resultatet ur datakällan.

Sedan gör du arbetet 2 ggr när du både "importerar" namnrymderna (<%@ import namespace="blabla"%>) och använder System.Data.SqlClient.SqlCommand. Om du importerar System.Data.SqlClient högst upp i koden behöver du ju bara använda New SqlConnection().

emissionMedlem sedan dec. 19996 721 inlägg
#13

hur kontrollerar jag Readern?

if dataReader.Read() then
'Japp! Något returnerades!
end if

pellesvenneMedlem sedan jan. 2002227 inlägg
#14

josef> sorry jag e newbie! komplicerad för mig! kanske visa koder?

pellesvenneMedlem sedan jan. 2002227 inlägg
#15

emission> Name 'dataReader' is not declared.

JosefMedlem sedan mars 20023 561 inlägg
#16
imports System
imports System.Data
imports System.Data.SqlClient

Function MyQueryMethod() As System.Data.IDataReader

	Dim dbConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("defaultConnectionString"))
	
	Dim queryString As String = "SELECT count [medlemmar].[anvandarnamn], [medlemmar].[losenord] FROM [medlemmar] WHERE anvandarnamn=@username AND losenord=@password"
	Dim dbCommand As SqlCommand = New SqlCommand(querystring, dbConnection)

	dbCommand.Parameters.Add("@username",SqlDbType.VarChar).Value = request.form("anvandarnamn").ToString()
	dbCommand.Parameters.Add("@password",SqlDbType.VarChar).Value = request.form("losenord").ToString()

	dbConnection.Open()
	Dim num As Integer = dbCommand.ExecuteScalar()
	dbConnection.Close()

	Return num
End Function

Och du kollar med:

If num = 1 Then
     ' Ja, inloggningen lyckades.
Else
     'Nej, inloggningen misslyckades
End If
pellesvenneMedlem sedan jan. 2002227 inlägg
#17

tack funkar!

pellesvenneMedlem sedan jan. 2002227 inlägg
#18

hur gör jag om jag vill uppdatera en post sammtidigt?

JosefMedlem sedan mars 20023 561 inlägg
#19

Antingen lägger du till ett till kommando i sql-strängen. Med ett ";" imellan. Eller så skapar du ett till SqlCommand-object (med samma connection), och kör ett .ExecuteNonQuery() på den nya sql-strängen.

Ps. Markera gärna det hjälpande inlägget ("Acceptera inlägget som slutgiltigt svar").

pellesvenneMedlem sedan jan. 2002227 inlägg
#20

jag gjorde om själva inloggningen från funktion till onclick metoden är det bättre så eller? och hur uppdaterar jag då databasen?

Private Sub loggain_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles loggain.Click

        Dim dbConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("connection"))

        Dim queryString As String = "SELECT Count(ID) from medlemmar WHERE anvandarnamn=@anvandarnamn AND losenord=@losenord"
        Dim dbCommand As SqlCommand = New SqlCommand(queryString, dbConnection)

        dbCommand.Parameters.Add("@anvandarnamn", SqlDbType.NVarChar, 15).Value = anvandarnamn.Text
        dbCommand.Parameters.Add("@losenord", SqlDbType.NVarChar, 15).Value = losenord.Text

        dbConnection.Open()
        Dim num As Integer = dbCommand.ExecuteScalar()
        dbConnection.Close()

        If num = 1 Then
[b]Här ska det Uppdateras Online = true[/b]
            Session("anvandarnamn") = anvandarnamn.Text
            'login.Text = "Rätt"
        Else
            'login.Text = "Fel"
        End If

    End Sub
136 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)