Запустите запрос к базе данных (sql server 2005) с помощью ajax. Является ли это возможным?

Я никогда не работал с ajax.

Мне нужно знать, можно ли использовать ajax для выполнения запроса на базе данных (sql server 2005).

Моя цель - выполнить запрос с обновлением страницы.

Есть какие-нибудь идеи?

Ответов (3)

Решение

Как сказал MarkusQ , это невозможно сделать напрямую, но вы можете вызвать веб-службу или метод страницы для выполнения запроса к базе данных и возврата результата на клиентскую сторону.

Что-то вроде этого для метода страницы (это не в моей голове и не тестировалось. Я также предполагаю, что вы используете 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 и прокси-класса JavaScript, который создается при настройке EnablePageMethods = true элемента ScriptManager управления.

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")
}

Напрямую нет. И это очень хорошо, поскольку JavaScript обычно работает на ненадежной машине.

Но должно быть довольно легко заставить ваш AJAX запустить обратный вызов (например, сообщение), а затем сделать запрос на стороне сервера.

AJAX => Клиентская сторона PHP / ASP / X => Серверная сторона (также базы данных)

По сути, все, что на стороне клиента происходит «прямо сейчас», в то время как сценарии на стороне сервера «уже произошли».

Вы не можете выполнить запрос к базе данных с помощью JS или чего-то подобного, AJAX - это не что иное, как иллюзия взаимодействия с пользователем, даже когда мы можем говорить о «выборке записей БД через AJAX», что на самом деле не то, что происходит.

Если AJAX - это просто больше JavaScript (Asynchronus JS, то есть происходит в его собственной «временной шкале» / потоке, а не в основном), то это будет означать, что выборка данных из БД (или выполнение чего-либо через AJAX в этом отношении) будет то же самое, что и ссылка на скрипты, которые статически делают это, то есть, щелкнув здесь, вы попадете на страницу, которая извлекает (на стороне сервера) и отображает (на стороне клиента) информацию.

Теперь представьте, что вы просто делаете именно это, но вместо того, чтобы направить свой основной поток к этому действию, вы запускаете асинхронный поток (который будет работать, например, так же, как и любая другая ссылка), который будет публиковать / получать данные и получать ответ X, которые вы можете обрабатывать через JS позже, создавая иллюзию «запросов в реальном времени».