使用ajax运行db query(sql server 2005)。可能吗?

时间:2009-02-28 23:37:49

标签: sql-server ajax sql-server-2005

我从未使用过ajax。

我需要知道是否可以使用ajax在db上运行查询(sql server 2005)。

我的目标是通过刷新页面来运行查询。

你有什么想法吗?

3 个答案:

答案 0 :(得分:5)

直接,没有。这是一件非常好的事情,因为JavaScript通常在不受信任的机器上运行。

但是让你的AJAX关闭一个回调(例如一个帖子)然后让它在服务器端进行查询应该很容易。

答案 1 :(得分:4)

正如MarkusQ所说,不可能直接执行此操作,但您可以调用Web服务或页面方法来执行数据库查询并将结果返回给客户端。

这样的页面方法(这是我的头脑和未经测试。我也假设您使用的是asp.net 3.5)

public partial class _Default : Page 
{
  [WebMethod]
  public static string PerformDatabaseQuery()
  {
      using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString)
      {
          using (SqlCommand cmd = con.CreateCommand())
          {
              cmd.CommandText = "SELECT records FROM myTable";
              cmd.CommandType = CommandType.Text;

              con.Open();

              SqlDataReader reader = cmd.ExecuteReader();
              StringBuilder sb = new StringBuilder();

              while (reader.Read())
              {
                   sb.Append((string)reader["records"]); 
                   //May want to do some other formatting here
              }

              return sb.ToString();
          }
      }
  }
}

然后从客户端调用页面方法。我将在这里使用jQuery

$.ajax({
  type: "POST",
  url: "Default.aspx/PerformDatabaseQuery",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(result) {
    //Do something with the returned data
  }
});

您可以使用JavaScript和在EnablePageMethods = true控件上设置ScriptManager时生成的JavaScript代理类来调用它。

function CallPerformDatabaseQuery()
{
    PageMethods.PerformDatabaseQuery(onSuccess,onFailed);
}

function onSuccess(result,userContext,methodName)
{
  // Do something with returned data
}

function onFailed(error,userContext,methodName)
{
  alert("An error occurred")
}

答案 2 :(得分:0)

AJAX =>客户端 PHP / ASP / X =>服务器端(数据库)

基本上,任何客户端都在“现在”发生,而服务器端脚本“已经发生”。

你无法使用JS或类似的东西对数据库执行查询,AJAX只不过是用户体验错误,即使我们可以说“通过AJAX获取数据库记录”,实际上并不是正在发生的事情。

如果AJAX只是更多的JavaScript(Asynchronus JS,也就是说,发生在它自己的“时间轴”/线程中,而不是主要的那个),那么这意味着从数据库中获取数据(或者通过AJAX做任何事情)与具有静态脚本的链接相同,这意味着,您单击此处,您将进入获取(服务器端)并显示(客户端)信息的页面。

现在假设您只是这样做,但是不是将主线程转移到该操作,而是启动异步线程(例如,可以像任何其他链接一样工作),这将发布/获取数据并获得X响应,您可以在以后通过JS处理,从而为您提供“实时查询”的错觉。