30 ноября 2020 года    
Понедельник | 21:21    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Программирование / Другие

Введение в ADO+ (FAQ)

Введение в ADO+ (FAQ)


Сартин Вячеслав


Что такое ADO+?


ADO+ - это новое поколение технологии доступа к данным от Microsoft. ADO+ была разработана с учетом распределенных и интернет приложений. ADO+ обеспечивает мощную поддержку XML и автономную обработку данных.

В настоящие время ADO+ доступна как часть NGWS платформы. В Visual Studio.NET реализована полная поддержка для ADO+.

Чем отличается ADO+ от ADO?


Основное отличие ADO+ от ADO - это отсутствие объекта Recordset. По заявлению Microsoft, ADO+ не заменяет, а дополняет общую технологию доступа к данным, вы сможете использовать вместе, ADO и ADO+ в вашем приложении.

Какой общий доступ к данным Namespaces в NGWS?


Обратите внимание: что Namespaces, это только слова из библиотеки NGWS. Вам потребуется импортировать библиотеки ADO перед использованием их классов, наподобие Java или C/C++.

Ниже перечислены имена общего доступа в Namespaces:

  • System.Data
  • System.Data.ADO
  • System.Data.SQL
  • System.Data.XML
  • System.Data.SQLTypes

Какие основные объекты в ADO+?


Этот примет позволит получить Вам представление о том как создавать каталоги и подкаталоги.

Основные объекты ADO+:

  • Connection
  • Command
  • DataReader
  • DataSet
  • DataSetCommand

Как подключится к базе данных?


Способ подключения к базе данных очень похож на используемый в ADO. Для этого используется объект Connection. Посмотрите на фрагмент кода приведенный ниже:

Dim cnn As ADOConnection
cnn = New ADOConnection("OLEDB_connection_string")

cnn.Open()
cnn.Close()

Как использовать объект Command?


Объект Command используется также как и в ADO.

Dim cmd As ADOCommand
cmd = New ADOCommand("my_query", cnn)
cmd.Execute()

cmd.CommandText = "new_query"

Как использовать объект Command для получения записей?


Вы можете выбирать записи используя объект DataReader объекта Command.

Dim dr As ADODataReader
cmd.Execute(dr)
Do While dr.Read()
   Response.Write(dr("field1"))
Loop
dr.Close()

Как использовать объект Command для выполнения хранимых процедур?


Вы можете выполнять хранимые процедуры как обычный запрос. В приведенном примере показано выполнение хранимой процедуры.

Dim cmd As ADOCommand
Dim p As ADOParameter
P = New ADOParameter("name", type, width)
p.Value = "myValue"
cmd.Parameters.Add(p)
cmd.Execute()

Что такое DataSetCommand и DataSet?


DataSetCommand подобна объекту Command, но используется для заполнения набора данных.

Dim dscmd As ADODataSetCommand
Dim ds As ADODataSet
dscmd = New ADODataSetCommand("sql", cnn)
ds = New DataSet()
dscmd.FillDataSet(ds, "recordset_name_in_ds")

В приведенном примере, DataSetCommand открывает соединение как обычно. Метод FillDataSet используется для заполнения набора данных.

Как работать с DataSet?


Dim row As DataRow
For Each row In ds.Tables("recordset_name_in_ds").Rows
    row.Columns("field1").ToString()
Next

Как добавить новую запись?


Dim row As DataRow
row = ds.Tables("recordset_name_in_ds").NewRow()
row("field1") = "value1"
row("field1") = "value1"

ds.Tables("recordset_name_in_ds").Rows.Add(row)
dscmd.Update(ds, "recordset_name_in_ds")

Как изменять данные?


Dim row As DataRow
row = ds.Tables("recordset_name_in_ds").Rows(i)
row("field1") = "value1"
row("field1") = "value1"
dscmd.Update(ds, "recordset_name_in_ds")

Как найти строку?


row = ds.Tables("recordset_name_in_ds").Find("Field1=value1")

Как удалить строку?


ds.Tables("recordset_name_in_ds").Rows(i).Delete
dscmd.Update(ds, "recordset_name_in_ds")

Как фильтровать данные в наборе данных?


Вы можете фильтровать данные согласно определенному условию, используя свойство RowFilter объекта DataView.

Dim view As DataView
view = new DataView(ds.Tables("users")) 
view.RowFilter = "user_id='bipin'"

Как обрабатывать ошибки?


Для обработки ошибок можно применить несколько способов. Наиболее часто для этого применяется блок Try...Catch. ADO+ обеспечивает механизм способный устанавливать собственное сообщение об ошибке для каждой строки.

Dim cnn As ADOConnection 
Dim cmd As ADODataSetCommand 
Dim ds As DataSet 
Dim errors As DataRow() 

Public Sub Page_load(sender as Object, evt as EventArgs)
    cnn = New ADOConnection("dsn=sample") 
    cnn.Open() 
    ds = New DataSet() 
    cmd = New ADODataSetCommand("select * from users", cnn)
    cmd.FillDataSet(ds, "users") 
    ds.Tables("users").Rows(0).RowError = "Error 1" 
    ds.Tables("users").Rows(1).RowError = "Error 2" 
    If ds.Tables("users").HasErrors Then 
        errors = ds.Tables("users").GetErrors() 
        For i = 0 To errors.Length -1 
            Response.Write("<BR>") 
            Response.Write(errors(i), ("user_id").ToString() & _
                                  "----" & errors(i).RowError) 
            Response.Write("<BR>") 
        Next
   End If 
End Sub

В приведенном коде устанавливается сообщение об ошибке в зависимости от результата проверки. Это позволяет Вам использовать общий обработчик ошибок. Так же, обратите внимание на то, что свойство RowError устанавливается в ADO+ если имеется реальная ошибка в базе данных.

Как управлять транзакциями?


Для управления транзакциями в ADO+ существуют методы BeginTransaction, CommitTransaction и RollBackTransaction. Эти методы очень похожи на эквивалентные в ADO. Посмотрите на ниже приведенный пример:

Try 
    cnn.Open() 
    cnn.BeginTransaction() 
    cmd = New ADOCommand("insert into users" & _
          "(user_id, name, password, email)" & _
          " values('aaa','aaa','aaa','aaa')",cnn) 
    cmd.Execute() 
    cmd.CommandText = "insert into users" & _
          "(user_id,name,password,email)" & _
          " values('bbb','bbb','bbb','bbb')" 
    cmd.Execute() 
    cnn.CommitTransaction() 
Catch myException As Exception 
    cnn.RollBackTransaction() 
    Response.Write(myException.ToString()) 
End Try
 Введение в ADO+ (FAQ)
Лента новостей


2006 (c) Copyright Hardline.ru