Avatar billede fun22 Nybegynder
17. maj 2007 - 23:50 Der er 22 kommentarer og
1 løsning

Hente fra database til session

Hej

Jeg har en SGLDataSource som ser sådan her ud:

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:DataConnectionString %>"
SelectCommand="SELECT [id] FROM [Menu] WHERE ([MainMenu] = '1')">
</asp:SqlDataSource>

Hvordan får jeg hentet mit id felt over i en session??
Avatar billede karsten_larsen Praktikant
18. maj 2007 - 20:58 #1
F.eks. sådan her

Dim Reader As System.Data.SqlClient.SqlDataReader
        Reader = Command.ExecuteReader(CommandBehavior.CloseConnection)
        If Reader.Read = True Then
            Do
              session("SessionNavn") = Reader("id").ToString.Trim
            Loop While Reader.Read
        Else

        End If

:-) karsten_larsen
Avatar billede tomledk Nybegynder
19. maj 2007 - 15:25 #2
I stedet for ExcuteReader, kan du alternativt kan du bruge en ExecuteScalar, der udelukkende henter første kolonne i din select. Data bliver returneret som et object.

string sql = "SELECT [id] FROM [Menu] WHERE ([MainMenu] = '1')";
SqlConnection connection = new SqlConnection(ConnectionStrings["DataConnectionString"]);
SqlCommand command = new SqlCommand(sql, connection);
try
{
    connection.Open();
    Session["result"] = command.ExecuteScalar();
}
finally
{
    connection.Close();
}
Avatar billede fun22 Nybegynder
20. maj 2007 - 16:53 #3
Der er ikke nogen af dem jeg kan køre..

Tomledk >> Jeg smider din kode i scritp delen i toppen af min masterpage.. Men der kommer 12 fejl, med ting der ikke er defineret osv.
Avatar billede neoman Novice
20. maj 2007 - 21:49 #4
så mangler du sikkert dette :
using System.Data;
using System.Data.SqlClient;
Avatar billede fun22 Nybegynder
21. maj 2007 - 16:13 #5
JEg får stadig følgende fejl:

Error    52    Statement cannot appear outside of a method body.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    6    1    C:\...\WebSite1\
Error    53    Statement cannot appear outside of a method body.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    7    1    C:\...\WebSite1\
Error    54    Syntax error.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    9    1    C:\...\WebSite1\
Error    55    Declaration expected.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    10    1    C:\...\WebSite1\
Error    56    Declaration expected.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    11    1    C:\...\WebSite1\
Error    57    Statement cannot appear outside of a method body.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    12    1    C:\...\WebSite1\
Error    58    Syntax error.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    13    1    C:\...\WebSite1\
Error    59    Declaration expected.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    14    5    C:\...\WebSite1\
Error    60    Declaration expected.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    15    5    C:\...\WebSite1\
Error    61    Syntax error.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    16    1    C:\...\WebSite1\
Error    62    Statement cannot appear outside of a method body.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    17    1    C:\...\WebSite1\
Error    63    Syntax error.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    18    1    C:\...\WebSite1\
Error    64    Declaration expected.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    19    5    C:\...\WebSite1\
Error    65    Syntax error.    C:\Documents and Settings\Ejer\Dokumenter\Visual Studio 2005\WebSites\WebSite1\MasterPage.master    20    1    C:\...\WebSite1\

Kan det have noget at gøre med jeg laver det i VB? OG dit måske er i C#
Avatar billede neoman Novice
21. maj 2007 - 16:37 #6
i vb hedder det
Imports System.data
Imports System.Data.Sqlclient

og udfra fejlbeskrivelsen alene, uden at kunne se de statements som generede den, kan man jo gætte på hvad som helst som årsag:)
Avatar billede fun22 Nybegynder
21. maj 2007 - 17:29 #7
Fejlene kommer stadig..

Det der generere fejlen er det her:

<script runat="server">
Imports System.data <-- 'Imports' statements must precede any declarations.
Imports System.Data.Sqlclient <-- 'Imports' statements must precede any declarations.
   
string sql = "SELECT [id] FROM [Menu] WHERE ([MainMenu] = '1')"; <-- Syntax error ved "string"
SqlConnection connection = new SqlConnection(ConnectionStrings["DataConnectionString"]); <-- Declaration expected ved SqlConnection
SqlCommand command = new SqlCommand(sql, connection);
try
{
    connection.Open();
    Session["result"] = command.ExecuteScalar();
}
finally
{
    connection.Close();
}
</script>

Osv.. Hvad er det jeg har glemt eller gør galt?
Avatar billede neoman Novice
21. maj 2007 - 18:00 #8
Øh - ingen anelse. Du arbejder tydeligvis uden separat code-behind fil, og det har jeg ingen erfaring i. Normalt så lægger man Imports bla bla øverst i code behind filen..

Umiddelbart tror jeg at du mangler type="text/VB" i dit script tag , således:
<script type="text/VB">
</script>
Avatar billede fun22 Nybegynder
21. maj 2007 - 18:11 #9
Starten af min masterpage ser sådan her ud:

<%@ Master Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server" type="text/VB">
string sql = "SELECT [id] FROM [Menu] WHERE ([MainMenu] = '1')";
SqlConnection connection = new SqlConnection(ConnectionStrings["DataConnectionString"]);
SqlCommand command = new SqlCommand(sql, connection);
try
{
    connection.Open();
    Session["result"] = command.ExecuteScalar();
}
finally
{
    connection.Close();
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
...
Avatar billede fun22 Nybegynder
21. maj 2007 - 18:11 #10
og det samme antal fejl kommer..
Avatar billede neoman Novice
21. maj 2007 - 18:12 #11
hmm bruger du vb eller c# ? i VB bruger man ikke ";" til at afslutte statements
Avatar billede neoman Novice
21. maj 2007 - 18:17 #12
og i øvrigt - er der nogen grund til at du bakser i een fil ? Når tingene er udskilt i aspx og code-behind så er livet altså ret meget nemmere
Avatar billede fun22 Nybegynder
21. maj 2007 - 18:20 #13
Jeg bruger WB..

Okay kan man gøre det ved en eksisterende fil så?
Avatar billede neoman Novice
21. maj 2007 - 18:25 #14
så smid alle ";" ud

Det nemmeste er vel at rename din eksisterende fil,lave Add New Item  og specificere det gamle filnavn. Husk at sætte kryds i feltet Place code in separate file. Derefter kan du kopiere de bidder du allerede har lavet vha træk og slip, og dit script skal så placeres i en eller anden passende handler - PageLoad eller whatever - afh af hvad du vil.
Avatar billede neoman Novice
21. maj 2007 - 18:28 #15
Jeg går off-line nu - så du må råbe på hjælp hos de andre hvis du stadig sidder fast.
Avatar billede fun22 Nybegynder
21. maj 2007 - 19:56 #16
Nu har jeg så en aspx.vb fil som ser således ud:

Imports System.Data
Imports System.Data.SqlClient

Partial Class MasterPage
    Inherits System.Web.UI.MasterPage

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        string sql = "SELECT [id] FROM [Menu] WHERE ([MainMenu] = '1')"
        SqlConnection connection = new SqlConnection(ConnectionStrings["DataConnectionString"])
        SqlCommand(Command() = New SqlCommand(Sql, connection))
        Try
        {
            connection.Open()
            Session["result"] = command.ExecuteScalar()
        }
        Finally
        {
            connection.Close()
        }
    End Sub
End Class

Men den melder også fejl..

'String' is a class type and cannot be used as an expression.
'.' expected.
'SqlConnection' is a type and cannot be used as an expression.
Method arguments must be enclosed in parentheses.
Name 'connection' is not declared.
Name 'ConnectionStrings' is not declared.
Identifier expected.
'SqlCommand' is a type and cannot be used as an expression.
'System.Data.Sql' is a namespace and cannot be used as an expression.
Name 'connection' is not declared.
Syntax error.
Name 'connection' is not declared.
Property access must assign to the property or use its value.
Identifier expected.
Syntax error.
'Finally' must end with a matching 'End Try'.
Syntax error.
Name 'connection' is not declared.
Syntax error.
Avatar billede neoman Novice
21. maj 2007 - 23:04 #17
jeg må ha sovet i timen - det er jo ren og sker c# som den ikke vil æde af forståelige årsager.

I VB syntax ser tingene sådan her ud f.eks. :

Public Function Create() As Integer
  Dim connection As New SqlConnection(_ConnectionString)
  connection.Open()
  Dim command As New SqlCommand("INSERT INTO Customers " _
    & "(LastName, FirstName, Address, City, State, Zip, Phone, "_
    & "SignUpDate) VALUES (@LastName, @FirstName, @Address, @City, "_
    & "@State, @Zip, @Phone, @SignUpDate)", connection)
  command.Parameters.AddWithValue("@LastName", _LastName)
  command.Parameters.AddWithValue("@FirstName", _FirstName)
  command.Parameters.AddWithValue("@Address", _Address)
  command.Parameters.AddWithValue("@City", _City)
  command.Parameters.AddWithValue("@State", _State)
  command.Parameters.AddWithValue("@Zip", _Zip)
  command.Parameters.AddWithValue("@Phone", _Phone)
  command.Parameters.AddWithValue("@SignUpDate", _SignUpDate)
  command.ExecuteNonQuery()
  command.Parameters.Clear()
  command.CommandText = "SELECT @@IDENTITY"
  Dim newCustomerID As Integer = _
    Convert.ToInt32(command.ExecuteScalar())
  connection.Close()
  _CustomerID = newCustomerID
  Return newCustomerID
End Function
Avatar billede fun22 Nybegynder
25. maj 2007 - 19:22 #18
Det skal vel så vær noget i den her stil når jeg skal hente det ud:

Public Function Create() As Integer
  Dim connection As New SqlConnection(_ConnectionString)
  connection.Open()
  Dim command As New SqlCommand("SELECT id from Menu WHERE MainMenu = '1'")

Men hvordan får jeg så fat i ID feltet?
Avatar billede neoman Novice
25. maj 2007 - 20:17 #19
Altså glem Function create - det var blot et copy/paste eksemper på VB kode som gør noget tilsvarende som du vil. Jeg vil anbefale dig meget kraftigt at kigge på  nogle af de ASP tutorials som ligger på www.asp.net og andre steder på nettet.

det eksempel karsten larsen kom med (som det første svar) er da fint nok med lidt modifikationer:

  Dim connection As New SqlConnection(_ConnectionString)
  connection.Open()
  Dim command As New SqlCommand("SELECT id from Menu WHERE MainMenu = 1")
  Dim Reader As System.Data.SqlClient.SqlDataReader
        Reader = Command.ExecuteReader(CommandBehavior.CloseConnection)
        while (reader.read)
              minVariabel = Reader("id").ToString
        end while


alt ovenstående hvis du har flere end et ID du vil hente. Hvis du ved du kun her een værdi så kan du gøre sådan her i stedet for:

minVariabel= command.executescalar
Avatar billede fun22 Nybegynder
17. juni 2007 - 14:20 #20
neoman >> Smider du lige et svar.. Det virkede..
Avatar billede neoman Novice
17. juni 2007 - 14:52 #21
oki tak - men husk lige karsten_larsen bidrog til løsningen, inden du gi'r points:)
Avatar billede fun22 Nybegynder
17. juni 2007 - 21:32 #22
karsten_larsen >> Smider du lige et svar også?
Avatar billede karsten_larsen Praktikant
15. juni 2010 - 22:14 #23
Mon ikke det går uden ;-) karsten_larsen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester