经过一番挖掘,我找到了解决这个问题的办法。这里是我使用NPGSQL数据连接器,ASP.NET(VB.NET),Javascript和AJAX从PostGresql数据库查询的解决方案。在我的应用程序中,名为“ajaxyThing”的AJAX函数从OpenLayers地图中的自定义控件接收一个值,但是您可以将任何值传递给该函数。
这里是Ajax的功能在我的JavaScript文件中的代码:
function ajaxyThing (selectedFT) {
var xmlhttp; //CREATE THE VARIABLE TO HOLD THE XMLHTTPRequest OBJEcT
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari THESE BROWSERS SUPPORT THE XMLHTTPRequest OBJECT
xmlhttp=new XMLHttpRequest(); //CREATE THE XMLHTTPRequest OBJECT
}
else
{// code for IE6, IE5 THESE BROWSERS DO NOT SUPPORT THE XMLHTTPRequest OBJECT AND NEED AND ACTIVEXOBJECT
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); //CREATE THE ActiveXObject
}
//When using Async = true specify a function to execute when the reponse is ready in the onradystatechange event
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("divAttributes").innerHTML = xmlhttp.responseText;
}
}
//TO SEND A REQUEST TO A SERVER, WE USE THE open() AND send() METHODS OF THE XMLHttpRequest object
xmlhttp.open("GET", "Handler.ashx?q="+ selectedFT, true);
xmlhttp.send();
}
然后在Microsoft Visual Web Developer速成2010我创建了一个Web处理程序(ashx的)文件,并从我的AJAX功能传递的变量进去。 我将变量“selectedFT”传递给Visual Studio Web处理程序。下面是从网上处理程序的代码:
Imports System
Imports System.Web
Imports Npgsql
Imports System.Data
Public Class Handler : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.Expires = -1
Dim q = context.Request.QueryString("q")
Dim pgConnection As NpgsqlConnection = New NpgsqlConnection
Dim pgCommand As NpgsqlCommand = New NpgsqlCommand
Dim pgConnectionString As String
Dim sda As NpgsqlDataAdapter
Dim ds As DataSet
ds = New DataSet
pgConnectionString = "Server=localhost;Port=5432;Userid=myPostGresUserId;Database=myDatabaseName;password=myPassword;Protocol=3;SSL=false;Pooling=true;MinPoolSize=1;MaxPoolSize=20;Encoding=UNICODE;Timeout=15;SslMode=Disable"
pgConnection.ConnectionString = pgConnectionString
pgConnection.Open()
pgCommand.Connection = pgConnection
pgCommand.CommandType = CommandType.Text
pgCommand.CommandText = "SELECT * FROM ""myTable"" WHERE ""myValue"" = '" & q & "';"
sda = New NpgsqlDataAdapter(pgCommand)
sda.Fill(ds)
If pgConnection.FullState = ConnectionState.Open Then
context.Response.Write("
Dim dr As DataRow
Dim dt As DataTable
dt = ds.Tables(0)
For Each dr In dt.Rows
context.Response.Write("
Column #1 Name:" & dr.Item(0) & "")context.Response.Write("
Column #2 Name:" & dr.Item(1) & "")context.Response.Write("
Column #3 Name:" & dr.Item(2) & "")Next
ds.Dispose()
context.Response.Write("
")Else
context.Response.Write("pgConnection did not open successfully.")
End If
pgConnection.Close()
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
我不会声称这是解决问题的最佳解决方案 - 但它的工作原理。我会接受任何建议,你可能会使这更优雅。谢谢!