Avatar billede gadebarnet Nybegynder
09. november 2004 - 11:53 Der er 15 kommentarer og
1 løsning

adgang til SQL server

Jeg har buger for at finde ud af hvordan man får adgang til en sql database via sit site fra sin app.

Altså, hvis der er lukket for udefra trafik til sql databasen men der er adgang fra www.

Jeg ved det kan lade sig gøre, har bare ikke styr på hvordan... Nogle der kan hjælpe ?
Avatar billede arne_v Ekspert
09. november 2004 - 12:45 #1
VB.NET applikation----(HTTP)-----ASP/PHP/ASP:NET/JSP side--------database
Avatar billede arne_v Ekspert
09. november 2004 - 12:46 #2
Simpelt VB.NET-ASP eksempel:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim req As HttpWebRequest = CType(WebRequest.Create("http://localhost/select.asp"), HttpWebRequest)
        Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
        Dim stmrdr As StreamReader = New StreamReader(resp.GetResponseStream)
        Dim line = stmrdr.ReadLine
        While line <> Nothing
            Dim parts = line.Split(" ".ToCharArray)
            Dim f1 As String = parts(0)
            Dim f2 As String = parts(1)
            Console.WriteLine(f1 & " " & f2)
            line = stmrdr.ReadLine
        End While
        stmrdr.Close
        resp.Close
    End Sub
End Class

<%
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Driver={mySQL};Server=localhost;Option=16834;Database=Test;"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM T1",con
Do While Not rs.EOF
  Response.Write rs("F1") & " " & rs("F2") & vbCrLf
rs.MoveNext
Loop
Set rs = Nothing
Set con = Nothing
%>
Avatar billede gadebarnet Nybegynder
09. november 2004 - 12:51 #3
hmm, arne jeg er ikke helt med der...

Hvad er hvad ?

Min app. skal have adgang til sql via web... ok?

Det er sikkert mig der ikke fatter det du har lavet der...?
Avatar billede arne_v Ekspert
09. november 2004 - 12:57 #4
Ovenstående VB.NET kode sender en HTTP request til en ASP side som udfører
en SELECT statement og returnerer data til VB.NET applikationen.

Det er vel det som du efterlyser ?

Meget simpelt. Men teknikken kan også bruges mere avanceret.
Avatar billede gadebarnet Nybegynder
09. november 2004 - 13:06 #5
Naa, ikke helt...

Jeg vil gerne kunne gøre hvad jeg vil i min app. Altså det eneste http skal hjælpe med er database adgangen...

Man kunne vel sende sine requests til en web side som så sender resultatet tilbage?

Men det er måske også det der sker ?
Avatar billede arne_v Ekspert
09. november 2004 - 13:23 #6
Ja
Avatar billede gadebarnet Nybegynder
09. november 2004 - 13:29 #7
Men, så skal alle de requests jeg kunne få bruger for jo være i den asp fil, eller hvordan?

Og hvordan den anden vej... ?

Eller sender man bare sin query og så kan man modtage de resultater i sin ap ?


Det er muligt at det lyder lidt beta de spørgsmål her,men jeg har siden hele natten og arbejdet så min hjerne køre ikke TOPDOLLER...
Avatar billede arne_v Ekspert
09. november 2004 - 13:37 #8
De 2 mest oplagte måder må være:

1)  en ASP fil per query

2)  en enkelt ASP fil og sender applikationen selv SQL strengen med over

    (det har jeg også et eksempel på men kun i C# -> ASP.NET side)
Avatar billede gadebarnet Nybegynder
09. november 2004 - 13:41 #9
Hvis du kan lave "2" om til nobet vb, så er det toppen, ellers tager jeg løsning 1.

Men i begge tilfælde, hvis nu det er en select man sender eller gerne vil modtage resultatet fra, hvad modtager man så, da jeg formoder at det er asp filen der køre movenext, eller hvordan =?
Avatar billede arne_v Ekspert
09. november 2004 - 13:53 #10
Se ASP kode 12:46:44 (nederst)
Avatar billede arne_v Ekspert
09. november 2004 - 13:54 #11
dbproxy.asp:

<%
Response.ContentType = "text/plain"
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Driver={MySQL};Database=Test;User Id=root;Password=;"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open CStr(Request("query")),con
Do While Not rs.EOF
  For i = 1 To rs.Fields.Count
      Response.Write rs.Fields.Item(i-1)
      If i < rs.Fields.Count Then
        Response.Write ","
      End If
  Next
  Response.Write vbCrLf
  rs.MoveNext
Loop
Set rs = Nothing
Set con = Nothing
%>
Avatar billede arne_v Ekspert
09. november 2004 - 13:55 #12
C# kode som kalder dbproxy:

using System;
using System.IO;
using System.Net;
using System.Web;

class MainClass
{
    public static void Main(string[] args)
    {
        WebRequest wr = WebRequest.Create("http://localhost/dbproxy.asp?query=" + HttpUtility.UrlEncode("SELECT * FROM T1"));
        StreamReader sr = new StreamReader(wr.GetResponse().GetResponseStream());
        string line;
        while((line = sr.ReadLine()) != null)
        {
            string[] fields = line.Split(",".ToCharArray());
            for(int i = 0; i < fields.Length; i++)
            {
                Console.Write("  " + fields[i]);
            }
            Console.WriteLine();
        }
    }
}
Avatar billede arne_v Ekspert
09. november 2004 - 13:56 #13
maskinel oversættelse til VB.NET:

Imports System
Imports System.IO
Imports System.Net
Imports System.Web

Class MainClass

Public Shared Sub Main(ByVal args() As String)
  Dim wr As WebRequest = WebRequest.Create("http://localhost/dbproxy.asp?query=" + HttpUtility.UrlEncode("SELECT * FROM T1"))
  Dim sr As StreamReader = New StreamReader (wr.GetResponse().GetResponseStream())
  Dim line As String
  While Not ((line = sr.ReadLine()) Is Nothing)
    Dim fields As String = line.Split(",".ToCharArray())
    Dim i As Integer = 0
    While i < fields.Length
      Console.Write(" " + fields(i))
      i += 1
    End While
    Console.WriteLine()
  End While
End Sub
End Class
Avatar billede arne_v Ekspert
21. november 2004 - 20:09 #14
OK ?
Avatar billede gadebarnet Nybegynder
04. december 2004 - 12:40 #15
Det der kunne jeg ikke lige få til at fungere... Kan du skære det HELT up i pap.
Avatar billede arne_v Ekspert
04. december 2004 - 13:13 #16
Det er svært at skære det mere ud i pap end køreklar kode.

Hvis du uddybede lidt hvad du ikke kunne få til at fungere, så kunne jeg
måske komme med nogle ideer.
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
Kurser inden for grundlæggende programmering

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