db koppling
58 svar · 1 365 visningar · startad av pellesvenne
web.config är ett mycket bra ställe att lägga den på :)
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?
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"];
Du hämtar värdet med:
using System.Configuration;
string connStr = ConfigurationSettings.AppSettings["defaultConnectionString"];
ska man anropa det med c sharp eller?
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>
<%@ 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>
tack hur kontrollerar jag att användarnamn och lösenordet stämmer?
If (från databasen) Then
end if
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
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?
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().
josef> sorry jag e newbie! komplicerad för mig! kanske visa koder?
emission> Name 'dataReader' is not declared.
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
tack funkar!
hur gör jag om jag vill uppdatera en post sammtidigt?
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").
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