powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO и DBF-файлы. Доступ к телу
4 сообщений из 4, страница 1 из 1
ADO и DBF-файлы. Доступ к телу
    #33244250
Bobby111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди добрые, есть такой код:
connect = Server.CreateObject("ADODB.Connection");
connect.ConnectionTimeout = 15;
connect.CommandTimeout = 10;
connect.Open("DSN=BAD");
var cmd = Server.CreateObject("ADODB.Command");
Все круто работает..
("DSN=BAD") -- ODBC-соединение с источником данных (папка с dbf-файлами). Как можно к ним достучаться еще в обход ODBC? Если можно, то примечик, плз.
...
Рейтинг: 0 / 0
ADO и DBF-файлы. Доступ к телу
    #33247167
GennadyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Надо установить Microsoft OLE DB Provider for Visual FoxPro 9.0 (vfpoledb.exe)
с микрософта

2) Пример кода ниже. Все дбф в C:\MACIR\Data, имена соотв. именам таблиц.

Dim conn As New OleDbConnection("Provider=VFPOLEDB.1; Data Source=C:\MACIR\Data;")
Dim Command As New OleDbCommand
Command.Connection = conn
Command.CommandText = "SELECT ID,FirstName,LastName,Company,Address,City,State,ZipCode,Country,Phone,Fax " + _
"FROM Subs WHERE FirstName='" & UCase(cAdr.FirstName) & "' AND LastName='" & UCase(cAdr.LastName) & "'"
conn.Open()
Dim DBFReader As OleDbDataReader
DBFReader = Command.ExecuteReader()
Dim MACIRAdr As Address
If DBFReader.HasRows Then
While DBFReader.Read()
MACIRAdr.id = Trim(DBFReader.GetValue(0))
MACIRAdr.FirstName = Trim(DBFReader.GetString(1))
MACIRAdr.LastName = Trim(DBFReader.GetString(2))))
MACIRAdr.Zip = Trim(DBFReader.GetString(7))
If MACIRAdr.FirstName = UCase(cAdr.FirstName) _
And MACIRAdr.LastName = UCase(cAdr.LastName) _
And MACIRAdr.Zip = UCase(cAdr.Zip) Then
DBFReader.Close()
Return MACIRAdr.id 'Same user
End If
End While
DBFReader.Close()
Else
'create user in MACIR
'get next SUBID to create new subscriber
DBFReader.Close()
Command.CommandText = "Select ID FROM SUBID"
DBFReader = Command.ExecuteReader()
DBFReader.Read()
Dim SUBID As Integer = Trim(DBFReader.GetValue(0))
DBFReader.Close()
'increment SUBID
Command.CommandText = "UPDATE SUBID SET ID=" & SUBID + 1
Command.ExecuteNonQuery()
'insert into SUBS
If cAdr.Country = "CA" Then
cAdr.Country = "CAN"
End If
Command.CommandText = "Insert into SUBS (" + _
"ID,SALUTE,FirstName,LastName,TITLE,Company," + _
"COMPCODE,MAILSTOP,Address,City,State," + _
"ZipCode,Country,Phone,Fax," + _
"FSA,COMMENTS,BADADDR,RENTLIST) VALUES " + _
"(" & SUBID & ",'','" & cAdr.FirstName & "','" & cAdr.LastName & "','','" & cAdr.Company & "'," + _
"'','','" & cAdr.Address1 & cAdr.Address2 & "','" & cAdr.City & "','" & cAdr.State & "'," + _
"'" & cAdr.Zip & "','" & cAdr.Country & "','" & cAdr.Phone & "','" & cAdr.Fax & "'," + _
"0,'','',?)"
Dim logical As Object
Command.Parameters.Add("@RENTLIST", logical).Value = True
Try
Command.ExecuteNonQuery()
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
...
...
Рейтинг: 0 / 0
ADO и DBF-файлы. Доступ к телу
    #33247187
GennadyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DBF с OleDbProvider=VFPOLEDB.1
После "успешного" отката захожу в SUBID.DBF и вижу там неоткатившееся 1111, вместо исходного 1756. Может кто знает в чем дело.

Огромное спасибо!

Dim myConnection As New OleDbConnection("Provider=VFPOLEDB.1;" + _
"Data Source=C:\MACIR\Data;")
myConnection.Open()
Dim myCommand As OleDbCommand = myConnection.CreateCommand()
Dim myTrans As OleDbTransaction
' Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted)
' Assign transaction object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
myCommand.CommandText = "UPDATE SUBID SET ID=1111"
myCommand.ExecuteNonQuery()
'Изначально ошибочная команда для выполнения Rollback:
myCommand.CommandText = "Insert into SUBID (ID) VALUES ('103')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As OleDbException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
...
Рейтинг: 0 / 0
ADO и DBF-файлы. Доступ к телу
    #33334013
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было уже, воспользуйтесь форумом... Для свободных таблиц поддержка транзакций в VFP 9.0 Ole DB Provider сделана не очень хорошо... Может вообще и не поддерживается... Не пробовал...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO и DBF-файлы. Доступ к телу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]