banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Truy cập CSDL từ nhiều máy cùng 1 lúc  XML
  [Programming]   Truy cập CSDL từ nhiều máy cùng 1 lúc 23/10/2007 23:15:48 (+0700) | #1 | 92406
bokinhvan_gl
Member

[Minus]    0    [Plus]
Joined: 19/07/2007 10:32:21
Messages: 95
Location: ngày hôm qua
Offline
[Profile] [PM] [Yahoo!]
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 01:42:58 (+0700) | #2 | 92446
lovebaby
Member

[Minus]    0    [Plus]
Joined: 29/06/2006 10:26:35
Messages: 22
Offline
[Profile] [PM]

bokinhvan_gl wrote:
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks 

Bạn sử dụng cơ chế Transaction xem sao. Mình nghĩ là nó sẽ giúp được bạn đó.
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 09:55:15 (+0700) | #3 | 92534
[Avatar]
ITSHVA
Member

[Minus]    0    [Plus]
Joined: 22/10/2007 09:39:54
Messages: 20
Location: BIOS
Offline
[Profile] [PM]

bokinhvan_gl wrote:
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks 

Mình thì không giỏi VB2005, mà mình đoán già đoán non cái đó còn gọi là VB.NET với MS VS 2005 phải không nhỉ ?
Và theo mình được biết thì chính MS SQL server đã làm nhiệm vụ synchronize rồi mà. Còn để đảm bảo chắc ăn thì bạn có thể tìm hiểu thêm về http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htm xem sao nha.
Done is better than perfect
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 12:17:42 (+0700) | #4 | 92568
sugarpirog
Member

[Minus]    0    [Plus]
Joined: 20/05/2005 19:55:59
Messages: 35
Offline
[Profile] [PM]

bokinhvan_gl wrote:
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks 


Lập trình truy cập CSDL trên nhiều máy, theo mình hiểu thi không có gì, trên VS2005. Cứ tiến hành lập trình bình thường như cho một máy, khi chạy cũng làm việc được trên nhiều máy.
Cho đến lúc này, mình cũng không biết khái niệm lập trình cho truy cập CSDL tuần tự là gì. Sorry.

Tất nhiên là với mục đích lập trình chạy CSDL từ nhiều máy, về kỹ năng phải chú ý là:
1-chỉ open connection khi cần thiết và đóng ngay khi thực hiện xong tác nghiệp,
2-nên dùng những truy vấn đơn giản
3-Lập trình sao cho số tác nghiệp trên CSDL là ít nhất, bằng cách lọc dữ liêu, dùng cờ...
4-Hạn chế tiến hành tác nghiệp CSDL từ sử lý sự kiện tự phát, trách quay vòng.
.....
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 13:04:32 (+0700) | #5 | 92578
[Avatar]
newinday
Member

[Minus]    0    [Plus]
Joined: 14/12/2006 15:17:09
Messages: 25
Offline
[Profile] [PM]

bokinhvan_gl wrote:
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks 


Chào bạn,

Bạn có thể tham khảo cuốn : Beginning Visual Basic 2005 Databases by Thearon Willis của NXB Wrox.

và download code về chạy thử.
Code:
http://www.wrox.com/WileyCDA/WroxTitle/productCd-076458894X,descCd-download_code.html

[Up] [Print Copy]
  [Question]   Re: Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 13:51:53 (+0700) | #6 | 92580
[Avatar]
giaodaulamxung
Member

[Minus]    0    [Plus]
Joined: 15/03/2007 18:01:28
Messages: 53
Location: Một chiều mưa tí tách!
Offline
[Profile] [PM] [Yahoo!]
Hôm trước đọc được cái này trên 3c.com.vn nhưng chưa test thử. bạn thử xem sao:

Để viết đoạn lệnh VB.Net truy xuất CSDL có tính tổng quát hóa cao, nghĩa là đoạn lệnh này sẽ chạy trên bất kỳ CSDL nào của bất kỳ hệ quản trị CSDL nào, bạn nên dùng các đối tượng ADO .Net và truy xuất CSDL thông qua DSN kết hợp với CSDL đó. Nếu bạn chỉ muốn truy xuất các CSDL của SQL Server, bạn có thể dùng các đối tượng ADO .Net như SqlConnection, SqlDataAdapter, SqlCommand, DataSet. Để hiển thị và cập nhật nội dung trong CSDL dễ dàng, tin cậy, bạn có thể dùng đối tượng DataGrid. Để demo việc truy xuất CSDL dùng các đối tượng ADO .Net, bạn hãy chạy Visual Studio .Net, tạo mới 1 project VB .Net rồi hiệu chỉnh hàm InitializeComponent. Sau đây là đoạn code VB .Net demo việc truy xuất CSDL trên 1 SQL Server nào đó mà bạn có account và biết địa chỉ của nó:

'khai báo các thư viện đối tượng cần dùng
Imports System.Data
Imports System.Data.SqlClient
Imports System.Windows.Forms
'code định nghĩa Form của ứng dụng
Public Class Form1
Inherits System.Windows.Forms.Form
'định nghĩa các biến đối tượng cần trong truy xuất database
Friend WithEvents SqlConnection1 As SqlConnection
Friend WithEvents SqlDataAdapter1 As SqlDataAdapter
Friend WithEvents DataSet1 As DataSet
Friend WithEvents DataGrid1 As DataGrid
Friend WithEvents SqlSelectCommand1 As SqlCommand
'định nghĩa hàm khởi động Form
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
'tạo đối tượng SqlConnection và thiết lập thông số
SqlConnection1 = New SqlConnection
'tên SQL Server và acount có thể do người dùng nhập vào
SqlConnection1.ConnectionString = 'data source=SqlServerName;user id=sa;packet size=4096;persist security info=False;initial catalog=Northwind'
'tạo đối tượng SqlSelectCommand và thiết lập thông số
SqlSelectCommand1 = New SqlCommand
SqlSelectCommand1.CommandText = 'SELECT * FROM Products where SupplierID=2'
SqlSelectCommand1.Connection = SqlConnection1
'tạo đối tượng SqlDataAdapter và thiết lập thông số
SqlDataAdapter1 = New SqlDataAdapter
SqlDataAdapter1.SelectCommand = SqlSelectCommand1
'tạo đối tượng DataSet và thiết lập thông số
DataSet1 = New DataSet
SqlDataAdapter1.Fill(DataSet1)
'tạo đối tượng DataGrid và thiết lập thông số
DataGrid1 = New DataGrid
DataGrid1.DataMember = ''
DataGrid1.DataSource = DataSet1
DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
DataGrid1.Location = New System.Drawing.Point(8, 8)
DataGrid1.Name = 'DataGrid1'
DataGrid1.Size = New System.Drawing.Size(576, 296)
DataGrid1.TabIndex = 0
'thiết lập thông số cho Form1
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(552, 317)
Me.Controls.Add(Me.DataGrid1)
Me.Name = 'Form1'
Me.Text = 'Form1'
End Sub
...

Để kiểm soát việc truy xuất đồng thời CSDL từ các ứng dụng khác nhau chạy trên các máy client khác nhau, bạn có thể dùng giải pháp giao tác (transaction) được Microsoft tích hợp trong framework .Net. Giao tác là 1 đoạn lệnh xử lý nào đó với tính chất thi hành đặc biệt: hoặc không lệnh nào trong đoạn lệnh đó được thi hành, hoặc tất cả các lệnh trong đoạn lệnh đó được thi hành và không ứng dụng nào khác có thể thấy trạng thái tạm thời trong lúc các lệnh trong giao tác đang được thực hiện. Với đặc tính của giao tác, bạn chỉ cần khai báo 1 giao tác chứa đoạn lệnh truy xuất CSDL của mình để đảm bảo nó sẽ không tranh chấp với bất kỳ chương trình nào khác. Đoạn lệnh VB .Net demo việc sử dụng giao tác:

'khai báo biến giao tác
Dim myTrans As SqlTransaction
'Bắt đầu 1 giao tác cục bộ
myTrans = SqlConnection1.BeginTransaction()
'đoạn lệnh truy xuất database được quản lý bởi SqlConnection1
...
'kết thúc giao tác
myTrans.Commit()

 

Chúc thành công!
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 21:53:01 (+0700) | #7 | 92615
bokinhvan_gl
Member

[Minus]    0    [Plus]
Joined: 19/07/2007 10:32:21
Messages: 95
Location: ngày hôm qua
Offline
[Profile] [PM] [Yahoo!]

sugarpirog wrote:

Lập trình truy cập CSDL trên nhiều máy, theo mình hiểu thi không có gì, trên VS2005. Cứ tiến hành lập trình bình thường như cho một máy, khi chạy cũng làm việc được trên nhiều máy.
Cho đến lúc này, mình cũng không biết khái niệm lập trình cho truy cập CSDL tuần tự là gì. Sorry.
..... 


Cách nói của bạn chỉ dành cho các ứng dụng không truy xuất CSDL thôi.Còn nếu bạn lập trình truy xuất CSDL từ nhiều máy thì sẽ xuất hiện lỗi khi có nhiều user cùng thao tác thêm,xóa,sửa trên 1 record đồng thời.Cám ơn các bạn đã cung cấp những tài liệu này.
[Up] [Print Copy]
  [Question]   Re: Truy cập CSDL từ nhiều máy cùng 1 lúc 24/10/2007 22:53:57 (+0700) | #8 | 92634
soidamientrung
Member

[Minus]    0    [Plus]
Joined: 23/08/2007 12:09:11
Messages: 54
Offline
[Profile] [PM] [Email]
Việc xung đột xảy ra khi có nhiều uer cùng thao tác trên 1 record hay một bảng thì đã có Hệ quản trị cơ sở dữ liệu quản lý và giải quyết.
Ví dụ: Bạn thực thi câu lệnh update trên một record mà record đó đang bị lock(lock này do user thực hiện hoặc do hệ thống thực hiện) thì sẽ báo lỗi và update không thành công. Bạn có thể bắt lỗi và xử lý lỗi mà.

Bạn có thể mô tả rõ bài toán thực tế của bạn để mọi người cùng tham khảo không. Nó sẽ giúp ích rất nhiều người đấy.


[Up] [Print Copy]
  [Question]   Re: Truy cập CSDL từ nhiều máy cùng 1 lúc 25/10/2007 00:11:26 (+0700) | #9 | 92658
bokinhvan_gl
Member

[Minus]    0    [Plus]
Joined: 19/07/2007 10:32:21
Messages: 95
Location: ngày hôm qua
Offline
[Profile] [PM] [Yahoo!]
Các bạn tham khảo quyển sách này ở chapter 11:Multi-User Programming.Nó gần giống với bài toán của mình.
Link download : http://www.filefactory.com/file/e5ec16/

Nếu các bạn sử dụng class Sqltransaction có sẵn trong VB2005 thì vẫn thực hiện được những bài toán nhiều user truy xuất CSDL như bạn "giaodaulamxung" đã viết

VD(từ MSDN):
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()

Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction

' Start a local transaction
transaction = connection.BeginTransaction("SampleTransaction")

' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction

Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

command.ExecuteNonQuery()

' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")

Catch ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)

' Attempt to roll back the transaction.
Try
transaction.Rollback()

Catch ex2 As Exception
' This catch block will handle any errors that may have occurred
' on the server that would cause the rollback to fail, such as
' a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
[Up] [Print Copy]
  [Question]   Truy cập CSDL từ nhiều máy cùng 1 lúc 25/10/2007 04:31:53 (+0700) | #10 | 92714
[Avatar]
haipt
Member

[Minus]    0    [Plus]
Joined: 20/08/2004 19:48:44
Messages: 165
Location: Hải phòng
Offline
[Profile] [PM] [WWW]

bokinhvan_gl wrote:
Mình có 1 CSDL trên SQL sever,mình đang lập trỉnh để nhiều máy truy cập vào CSDL này cùng 1 lúc,nếu máy này truy cập thêm ,xóa ,sửa xong rồi đền máy khác,mình sử dụng Vb 2005,nếu có bạn nảo giỏi về VB2005 xin giúp đỡ.MÌnh đang cần 1 đoạn code về truy cập CSDL tuần tự này.Thanks 

Làm gì có chuyện cùng truy xuất 1 lúc hả bạn, ado.net truy xuất CSDL là batch update, tùy theo business rule mà xử lý, ví dụ 2 user A và B, A xóa bản ghi 001, B lại sửa 001, khi cập nhật CSDL, nếu B cập nhật sau thì show error : bản ghi đã bị xóa rùi refresh DB..
Nói thật lập trình CSDL lên qua 1 forum khác như www.caulacbovb.com hay WWW.dot.net.vn mà ngiên cứu
Chúc vui,.
[Up] [Print Copy]
  [Question]   Re: Truy cập CSDL từ nhiều máy cùng 1 lúc 25/10/2007 08:07:54 (+0700) | #11 | 92760
sugarpirog
Member

[Minus]    0    [Plus]
Joined: 20/05/2005 19:55:59
Messages: 35
Offline
[Profile] [PM]
Cơ chế Transaction chẳng liên quan gì đến sủ dụng nhiều máy, nó dùng để kiểm tra các tác nghiệp trên CSDL: nếu thực hiện hết các bước thì commit, nếu không thì rollback.
Cứ viết trình bình thường cho một máy, rồi chạy thử trên nhiều máy, bạn sẽ thấy là tự nhiên sẽ chạy được trên nhiều máy và cùng làm việc trên một CSDL. Nếu cần trình chạy ngon, nhanh thì chỉ cần lưu ý những điều mình đã trao đổi ở trên.

Còn việc sử lý lỗi thì phải làm rồi, tùy fantazy của từng người.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|