Доброго всем!
Хочется очень узнать кто какие методы использует для связи клиентского приложения с сервером БД (или с локальной).
Не важно какой язык используется и какая СУБД. Интересует сам подход.
Особенно интересно в свете ООП.
Как производится выборка данных? Как - операции сохранения, удаления, изменения? Как с данными в дальнейшем приложение работает? Если можно с примерами кода.
Для почину два варианта:
1
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
type
TSocStatus = class(TDBObj)
private
FIdSocStatus: integer;
FSocStatus: string;
procedure SetIdSocStatus(const Value: integer);
procedure SetSocStatus(const Value: string);
public
constructor Create;
destructor Destroy;override;
class function GetSqlText:string; override;
property IdSocStatus:integer read FIdSocStatus write SetIdSocStatus;
property SocStatus:string read FSocStatus write SetSocStatus;
procedure Open; override;
procedure Delete; override;
procedure Save; override;
end;
TListSocStatus = class(TDBList)
private
public
constructor Create;
destructor Destroy; override;
class function GetSqlText:string; override;
procedure Load;override;
end;
..................................................................
class function TSocStatus.GetSqlText: string;
begin
Result:=TListSocStatus.GetSqlText+' WHERE ID_SOCSTATUS=%d';
end;
procedure TSocStatus.Open;
var ds:TDataSet;
begin
if Assigned(idll) then begin
try
ds:=idll.GetDataSet(Format(Self.GetSqlText,[FIdSocStatus]));
ds.Open;
Self.SocStatus := ds.FieldByName('NAME_SOCSTATUS').AsString;
Self.IdSocStatus := ds.FieldByName('ID_SOCSTATUS').AsInteger;
Self.IsNew:=false;
ds.Close;
ds.Free;
except on e:Exception do begin
ds.Free;
raise;
end;
end;
end;
end;
procedure TListSocStatus.Load;
var ds:TDataSet;
ss:TSocStatus;
begin
if Assigned(idll) then begin
try
ds:=idll.GetDataSet(Self.GetSqlText);
ds.Open;
Self.Clear;
while not ds.Eof do begin
ss:=TSocStatus.Create;
ss.SocStatus := ds.FieldByName('NAME_SOCSTATUS').AsString;
ss.IdSocStatus := ds.FieldByName('ID_SOCSTATUS').AsInteger;
ss.IsNew:=false;
Self.Add(ss);
ds.Next;
end;
ds.Close;
ds.Free;
except on e:Exception do begin
ds.Free;
raise;
end;
end;
end;
end;
...................................................................................
//из примеров VS.NET
2
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
string strAccessConn = "Provider=MSDAORA.1;Password=***;User ID=dean;Data Source=iasudb";
string strAccessSelect = "SELECT * FROM ADMIN.DEAN_SVS_GROUPS";
// Create the dataset and add the Categories table to it:
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add("ADMIN.DEAN_SVS_GROUPS");
// Create Access objects:
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect,myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
try
{
myDataAdapter.Fill(myDataSet,"ADMIN.DEAN_SVS_GROUPS");
}
finally
{
myAccessConn.Close();
}
try
{
DataTableCollection dta = myDataSet.Tables;
foreach (DataTable dt in dta)
{
Console.WriteLine("Found data table {0}", dt.TableName);
}
Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count);
Console.WriteLine("{0} tables in data set", dta.Count);
Console.WriteLine("{0} rows in Categories table", myDataSet.Tables["ADMIN.DEAN_SVS_GROUPS"].Rows.Count);
Console.WriteLine("{0} columns in Categories table", myDataSet.Tables["ADMIN.DEAN_SVS_GROUPS"].Columns.Count);
DataColumnCollection drc = myDataSet.Tables["ADMIN.DEAN_SVS_GROUPS"].Columns;
int i = 0 ;
foreach (DataColumn dc in drc)
{
Console.WriteLine("Column name[{0}] is {1}, of type {2}",i++ , dc.ColumnName, dc.DataType);
}
DataRowCollection dra = myDataSet.Tables["ADMIN.DEAN_SVS_GROUPS"].Rows;
foreach (DataRow dr in dra)
{
Console.WriteLine("CategoryName[{0}] is {1}", dr[ 0 ], dr[ 9 ]);
}
}
catch (Exception e)
{
Console.WriteLine("Oooops. Caught an exception:\n{0}", e.Message);
}
}
Мнения? Коментарии?
С уважением _svs