• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Class CSDL chung cho SQL Server và MS Access

Bộ sưu tập các thư viện hỗ trợ sẳn cho Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Nội qui chuyên mục
1. Gửi bài viết tại đây, Tester sẽ chuyển vào trong nếu bài viết đạt yêu cầu.
2. Gửi bài theo mẫu qui định: viewtopic.php?f=2&t=5
[ten][/ten]
[loai][/loai]
[ngonngu][/ngonngu]
[tacgia][/tacgia]
[chucnang][/chucnang]
[end][/end]
FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Sáu 18/01/2013 9:23 am

Gồm có 2 class là AppConfig class đễ thay đỗi thông tin trong Application Configuration (exe.config) và Database class có những chức năng đễ thao tác CSDL.
Tập tin đính kèm
DemoApplication.zip
(26.04 KiB) Đã tải 539 lần



Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi tungcan5diop » T.Sáu 18/01/2013 3:01 pm

lỗi bạn ơi, chắc là do ko xét quyền của Win hay của SQL rồi.
Tập tin đính kèm
001.JPG
001.JPG (25.84 KiB) Đã xem 3459 lần
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Sáu 18/01/2013 6:45 pm

Đó là quyền cũa win cho nên bạn phãi uncheck checkbox Integrated Security và điền vào user name và password ỡ dưới mới được.

Hình đại diện của người dùng
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi tungcan5diop » T.Bảy 19/01/2013 8:35 am

sau khi đăng nhập thành công thì báo lỗi như trên, tắt đi mở lai, cũng lỗi như trên.
Tập tin đính kèm
002.JPG
002.JPG (7.74 KiB) Đã xem 3440 lần
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » CN 20/01/2013 6:21 am

Customers là table trong Northwind database, trường hợp không dùng database đó thì vào form1 thay thế customers thành tên table nào đó trong database cũa bạn.

binkute
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 57
Ngày tham gia: T.Ba 15/01/2013 8:01 pm
Has thanked: 10 time
Been thanked: 3 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi binkute » T.Bảy 26/01/2013 5:54 pm

Trong sever explorer thì mình đã kết nối được với CSDL, nhưng trong demo của bạn mình vẫn nhập thông số đó nhưng cứ báo lỗi ko kết nối. hic
Là sao bạn nhỉ

chimokato
Bài viết: 1
Ngày tham gia: T.Ba 19/03/2013 2:22 am

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi chimokato » T.Ba 19/03/2013 2:28 am

Trước tiên cảm ơn bạn đã đóng góp 1 class rất hay và bổ ích. Tuy nhiên bạn nên kiểm tra lại Function ExecuteReader vì tôi thấy nó không thể trả về kiểu dbDataReader ngay cả khi đổi lại như sau:
Public Function ExecuteReader(ByVal commandText As String) As DbDataReader
Dim reader As DbDataReader = Nothing
Using connection As DbConnection = dbProviderFactory.CreateConnection()
connection.ConnectionString = Me.ConnectionString
Using cmd As DbCommand = connection.CreateCommand()
connection.Open()
cmd.CommandText = commandText
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection) ' Đã đổi thành closeConnection
End Using
End Using
Return reader
End Function


Hình như vấn đề này không làm được hay sao ấy! Nếu có thể bạn vui lòng chỉnh sửa lại nha!

Thanks!

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Ba 19/03/2013 1:37 pm

Bạn sữa lại function đó như sau:
  1. Public Function ExecuteReader(ByVal commandText As String) As DbDataReader
  2.         Dim reader As DbDataReader = Nothing
  3.         Using cmd As DbCommand = Me.Connection.CreateCommand()
  4.             cmd.CommandText = commandText
  5.             Me.Connection.Open()
  6.             reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
  7.         End Using
  8.         Return reader
  9.     End Function

Hình đại diện của người dùng
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Bài viết: 227
Ngày tham gia: T.Năm 11/10/2012 9:47 am
Đến từ: Thái Bình
Has thanked: 78 time
Been thanked: 24 time
Liên hệ:

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi QUANITGROBEST » T.Tư 27/03/2013 12:00 pm

Hiện mình đang làm 1 dự án trên wwinform VB.net, chuối kết nối hiện tại mình code cứng như vầy trong file app.config
  1. <add name="connect" connectionString="Data Source=192.168.2.160\SQL2K8;database=GROBEST_DB2;User ID=sa;Password=*Ab123456;" providerName="System.Data.SqlClient"/>


Nếu như vậy khi người dùng thay đổi server chứa CSDL mình phải bung code ra sửa lại file kết nối build lại source và cài đặt lại, như vậy phức tạp quá, bây jo mình muốn tạo 1 form kết nối cho người dùng nhập vào các thông số kết nối lên các textbox và cập nhập lại mỗi khi thay đổi, nhưng chưa biết làm như thế nào, có phải tạo lại file kết nối lưu trong 1 file xml hay là phải như thế nào mình cũng đang làm mà chưa ra, bạn nào làm rồi hoặc có ý tưởng share cho mình tham khảo, đang cần làm ngay
thank u các mem đã quan tâm
đang bí vấn đề này chưa ra, các mod đừng xoá bài đăng nha
http://grobest.com.vn/[url]spasenhong.vn[/url]

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Tư 27/03/2013 1:50 pm

Trong cái demo trên khi không connect được với database thì nó sẽ hiện ra cái form đễ điền vào server, database, user và password rồi nó sẽ sữa lại đường dẫn đó luôn. Nên test bằng cách chạy bằng executable thay vì chạy trong visual studio.

Hình đại diện của người dùng
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Bài viết: 227
Ngày tham gia: T.Năm 11/10/2012 9:47 am
Đến từ: Thái Bình
Has thanked: 78 time
Been thanked: 24 time
Liên hệ:

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi QUANITGROBEST » T.Tư 27/03/2013 4:08 pm

mình hiểu ý bạn nói, khi chương trình chạy ko thấy DB nó sẽ show lên form1 cho ngừoi dùng chọn kết nối, khi chọn kết nối thành công sẽ show lên dữ liệu của table tương ứng trong CSDL, nhưng nó lại ko lưu lại đường dẫn mà người dùng chọn(mình ko thấy trong app.config hoặc DemoApplication.exe.config)
mih có tham khảo 1 đoạn code trên mạng
Here is the original App.config file:

[xml]<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Setting1" value="1" />
<add key="Setting2" value="2" />
</appSettings>
</configuration>[/xml]

Here is the code sample to modify the application settings value:

[csharp]XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

foreach (XmlElement element in xmlDoc.DocumentElement)
{
if (element.Name.Equals("appSettings"))
{
foreach (XmlNode node in element.ChildNodes)
{
if (node.Attributes[0].Value.Equals("Setting1"))
{
node.Attributes[1].Value = "New Value";
}
}
}
}

xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

ConfigurationManager.RefreshSection("appSettings");[/csharp]

nhưng khi chạy thì bao lỗi
Unable to cast object of type 'System.Xml.XmlComment' to type 'System.Xml.XmlElement'.

ngay trong vòng lặp, đang làm vấn đề này mãi, đau đầu quá...
http://grobest.com.vn/[url]spasenhong.vn[/url]

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Tư 27/03/2013 6:24 pm

Cái demo trên viết bằng VB.NET, nếu trong VS thì những giá trị đó ỡ Project Properties -> Settings và khi ỡ runtime thì nó nằm trong application.exe.config.
Còn nếu mà muốn thay đỗi những giá trị cũa AppSettings như trên cũa bạn và viết theo C# thì viết như sau:
  1. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  2. AppSettingsSection app = config.AppSettings;
  3. int value = int.Parse(app.Settings["Setting1"].Value);      //lấy giá trị cũa Setting1
  4. app.Settings["Setting1"].Value = (value + 1).ToString();  //lưu vào giá trị mới
  5. config.Save(ConfigurationSaveMode.Modified);

Hình đại diện của người dùng
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Bài viết: 227
Ngày tham gia: T.Năm 11/10/2012 9:47 am
Đến từ: Thái Bình
Has thanked: 78 time
Been thanked: 24 time
Liên hệ:

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi QUANITGROBEST » T.Năm 28/03/2013 8:51 am

cám ơn FlyingFox, bạn rất nhiệt tình, nhưng cho mình hỏi thêm mình có chút thắc mắc
chương trình mình code bằng vb.net nên khi tìm kiếm trên mạng thì vb hoặc C# đều được(có thể convert quan nhau), đoạn code bạn đưa mình convert qua VB.net và chỉnh sửa lại file app cho đúng với chương trình mình đang viết.
  1.   Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
  2.         Dim app As AppSettingsSection = config.AppSettings
  3.         Dim value As String = app.Settings("Server").Value ' Vì là chuỗi nên mình đổi lại
  4.         'lấy giá trị cũa Server và gán vào giá trị mới
  5.         app.Settings("Server").Value = "New server"
  6.         'lưu vào giá trị mới
  7.         config.Save(ConfigurationSaveMode.Modified)

khi mình chạy ở chế độ debug thì dữ liệu file app có thay đổi (trong file Grobest.vshost.exe.Config, project mình là Grobest), nhưng khi mình chạy chương trình thực hiện thì nó lại ko thay đổi kết quả(ko thấy thay đổi được cập nhập trong Grobest.exe.config), ko biết vì sao, khi tạo file appconfig
mình thao tác trực tiếp trên file app.config ko thông qua project properties -> seting, đây là nội dung file app.config
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <appSettings>
  4.     <add key="Server" value="serverq2.168.2.160"/>
  5.     <add key="Database" value="Grobest"/>
  6.     <add key="Username" value="sa"/>
  7.     <add key="Password" value="*Ab123456"/>
  8.   </appSettings>
  9. </configuration>
http://grobest.com.vn/[url]spasenhong.vn[/url]

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Năm 28/03/2013 10:25 am

Mình có tạo demo bằng VB.NET với code trên cũa bạn rồi chạy exe ỡ trong folder debug thì thấy nó có thay đỗi giá trị ỡ trong file *.exe.config được mà.
Tập tin đính kèm
DemoApplication.zip
(58.28 KiB) Đã tải 256 lần

Hình đại diện của người dùng
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Bài viết: 227
Ngày tham gia: T.Năm 11/10/2012 9:47 am
Đến từ: Thái Bình
Has thanked: 78 time
Been thanked: 24 time
Liên hệ:

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi QUANITGROBEST » T.Năm 28/03/2013 12:01 pm

mình test lại và làm được rồi, mình hiểu rồi bạn ah, khi chạy trên VS thì ko thay đổi do nó đọc kết nối từ file app.config, khi build ra file exe mình chạy file thực thi exe đó nó sẽ ghi dữ liệu trên file *.exe.config và nó lấy thông tin kết nối từ đây, mình cứ thắc mắc mãi sao nó ko thay đổi file app.config, bây jo mới hiểu
hi cám ơn FlyingFox nhiều nha
http://grobest.com.vn/[url]spasenhong.vn[/url]

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Ba 18/05/2010 11:49 pm
Has thanked: 7 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi thinh18tt » T.Hai 16/06/2014 9:33 am

Thắc mắc:
Mình mới làm quen với vb.net, trước kia mình chỉ dùng vb6 thôi, nên trong Class của bạn, mình thấy có nhiều Sub có 2 Sub giống hệt nhau, chỉ khác tham số. Bạn có thể giải thích cho mình hiểu được không?

FlyingFox
Guru
Guru
Bài viết: 772
Ngày tham gia: T.Tư 20/04/2011 9:56 am
Been thanked: 311 time

Re: Class CSDL chung cho SQL Server và MS Access

Gửi bàigửi bởi FlyingFox » T.Hai 16/06/2014 4:52 pm

Cái đó gọi là Overloading, ví dụ như tính diện tích hình vuông hoặc hình chữ nhật thì với hình vuông thì chĩ cần biết một cạnh thôi, còn hình chữ nhật thì cần tới 2 cạnh. Do đó khi viết function tính diện tích thì viết là

  1. Public Function DienTich (width As Double, height As Double) As Double
  2.     Return width * height
  3. End Function
  4.  
  5. Public Function DienTich (width As Double) As Double
  6.     Return DienTich(width, width);
  7. End Function


Quay về “[.NET] Module, Class, UserControl, DLL”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách