Jag tänkte göra en databasdriven meny där länkarna radas upp beroende på vem man är. För att avgöra det läser jag in ett värde i en session, och det fungerar bra. Men när jag ska göra en if-sats fungerar det inte. Det verkar som variabeln från sessionen inte får något värde, eller (det mer troliga) så gör jag fel. Tack för hjälpen på förhand. Du kan inte dimensionera en variabel i en if sats och sedan använda den utifrån. Har du Option Explicit påslaget?? Har försökt sätta på Option Explicit, men det går inte. Får bara felmeddelande hur jag än sätter den, något tips? Hela koden ser ut så här: Skulle du kunna slänga in vad du får för fel? Det underlättar juh drastiskt om man skall felsöka. Sen en sak ang. Option Explicit - om du får en massa fel när den är påslagen så gör den juh sitt jobb? :-D Problemet är att utan option explicit så funkar sidan förutom att länkarna inte kommer upp, den verkar inte köra if-satsen alls. Sen när jag försöker lägga in Option Explicit, så klagar den hela tiden på att jag lägger den på fel ställe. Efterom kat är en integer så ska du inte jämföra den med en sträng utan ett tal: Du kanske skulle testa dina databasfrågor också. ;)If-sats
Function getPage() As System.Data.DataSet
Dim kat As String = lblKat.Text
Dim connectionString As String = "server='(local)'; trusted_connection=true; database='TM'"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)
If (kat = "1") Then
Dim queryString As String = "SELECT [Navigering].* FROM [Navigering] WHERE (([Navigering].[Kategori] = '1') AND ([Navigering].[Kategori] = '2') AND ([Navigering].[Kategori] = '3')) ORDER BY [Namn]"
Else If (kat = "2") Then
Dim queryString As String = "SELECT [Navigering].* FROM [Navigering] WHERE (([Navigering].[Kategori] = '2') AND ([Navigering].[Kategori] = '3')) ORDER BY [Namn]"
Else
Dim queryString As String = "SELECT [Navigering].* FROM [Navigering] WHERE ([Navigering].[Kategori] = '3') ORDER BY [Namn]"
End If
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dataAdapter As System.Data.IDbDataAdapter = New System.Data.SqlClient.SqlDataAdapter
dataAdapter.SelectCommand = dbCommand
Dim dataSet As System.Data.DataSet = New System.Data.DataSet
dataAdapter.Fill(dataSet)
Return dataSet
End FunctionSv: If-sats
Prova det här:
<code>
Function getPage() As System.Data.DataSet
Dim kat As String = lblKat.Text
Dim connectionString As String = "server='(local)'; trusted_connection=true; database='TM'"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString as String
If (kat = "1") Then
queryString = "SELECT [Navigering].* FROM [Navigering] WHERE (([Navigering].[Kategori] = '1') AND ([Navigering].[Kategori] = '2') AND ([Navigering].[Kategori] = '3')) ORDER BY [Namn]"
Else If (kat = "2") Then
queryString = "SELECT [Navigering].* FROM [Navigering] WHERE (([Navigering].[Kategori] = '2') AND ([Navigering].[Kategori] = '3')) ORDER BY [Namn]"
Else
queryString = "SELECT [Navigering].* FROM [Navigering] WHERE ([Navigering].[Kategori] = '3') ORDER BY [Namn]"
End If
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dataAdapter As System.Data.IDbDataAdapter = New System.Data.SqlClient.SqlDataAdapter
dataAdapter.SelectCommand = dbCommand
Dim dataSet As System.Data.DataSet = New System.Data.DataSet
dataAdapter.Fill(dataSet)
Return dataSet
End Function
</code>Sv: If-sats
Sv: If-sats
<%@ Control Language="VB" Debug="true" %>
<script runat="server">
Function getPage() As System.Data.DataSet
Dim kat As Integer = Session("Kat")
Dim connectionString As String = "server='(local)'; trusted_connection=true; database='hemsidan'"
Dim dbConnection As System.Data.IDbConnection = New System.Data.SqlClient.SqlConnection(connectionString)
Dim queryString as String
If (kat = "1") Then
queryString = "SELECT [navigering].* FROM [navigering] WHERE (([navigering].[Kategori] = '1') AND ([navigering].[Kategori] = '2') AND ([navigering].[Kategori] = '3') AND ([navigering].[Kategori] = '4') AND ([navigering].[Kategori] = '5')) ORDER BY [Sida]"
Else If (kat = "2") Then
queryString = "SELECT [navigering].* FROM [navigering] WHERE (([navigering].[Kategori] = '2') AND ([navigering].[Kategori] = '3')) ORDER BY [Sida]"
Else
queryString = "SELECT [navigering].* FROM [navigering] WHERE ([navigering].[Kategori] = '3') ORDER BY [Sida]"
End If
Dim dbCommand As System.Data.IDbCommand = New System.Data.SqlClient.SqlCommand
dbCommand.CommandText = queryString
dbCommand.Connection = dbConnection
Dim dataAdapter As System.Data.IDbDataAdapter = New System.Data.SqlClient.SqlDataAdapter
dataAdapter.SelectCommand = dbCommand
Dim dataSet As System.Data.DataSet = New System.Data.DataSet
dataAdapter.Fill(dataSet)
Return dataSet
End Function
Sub Page_Load()
If Not Page.IsPostBack Then
DataList1.DataSource = getPage()
DataList1.DataBind()
End If
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
Session.Abandon
Response.redirect("../../default.aspx")
End Sub
</script>
<p>
<asp:DataList id="DataList1" Font-Size="X-Small" runat="server">
<ItemTemplate>
<asp:HyperLink id="HyperLink1" runat="server" style="TEXT-DECORATION: none" Text='<%# DataBinder.Eval(Container, "DataItem.Sida") %>' NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.URL") %>' ForeColor="White"></asp:HyperLink>
</ItemTemplate>
</asp:DataList>
<br />
<asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Logga ut"></asp:Button>
</p>Sv: If-sats
//AndreasSv: If-sats
Sv: If-sats
If (kat = 1) Then Sv: If-sats
Titta på den här frågan:
queryString = "SELECT [navigering].* FROM [navigering] WHERE (([navigering].[Kategori] = '1') AND ([navigering].[Kategori] = '2') AND ([navigering].[Kategori] = '3') AND ([navigering].[Kategori] = '4') AND ([navigering].[Kategori] = '5')) ORDER BY [Sida]"
Den kommer aldrig att returnera en enda post, oavsett vad som ligger i databasen. Ett fält kan nämligen inte ha flera värden samtidigt. Kategori kan inte samtidigt vara 1, 2, 3, 4 och 5, vilket krävs för att frågan ska returnera något.
Du får använda or mellan villkoren istället:
queryString = "SELECT [navigering].* FROM [navigering] WHERE (([navigering].[Kategori] = '1') OR ([navigering].[Kategori] = '2') OR ([navigering].[Kategori] = '3') OR ([navigering].[Kategori] = '4') OR ([navigering].[Kategori] = '5')) ORDER BY [Sida]"
Eller ännu enklare:
queryString = "SELECT [navigering].* FROM [navigering] WHERE [navigering].[Kategori] IN ('1','2','3','4','5') ORDER BY [Sida]"