• 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#

Moderators: tungcan5diop, QUANITGROBEST

Forum rules
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
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

Class CSDL chung cho SQL Server và MS Access

Postby FlyingFox » Fri 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.
Attachments
DemoApplication.zip
(26.04 KiB) Downloaded 615 times



User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

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

Postby tungcan5diop » Fri 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.
Attachments
001.JPG
001.JPG (25.84 KiB) Viewed 6005 times
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

FlyingFox
Guru
Guru
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Fri 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.

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

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

Postby tungcan5diop » Sat 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.
Attachments
002.JPG
002.JPG (7.74 KiB) Viewed 5986 times
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

FlyingFox
Guru
Guru
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Sun 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ổ
Posts: 57
Joined: Tue 15/01/2013 8:01 pm
Has thanked: 10 times
Been thanked: 3 times

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

Postby binkute » Sat 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
Posts: 1
Joined: Tue 19/03/2013 2:22 am

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

Postby chimokato » Tue 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
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Tue 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

User avatar
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Posts: 227
Joined: Thu 11/10/2012 9:47 am
Location: Thái Bình
Has thanked: 78 times
Been thanked: 24 times
Contact:

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

Postby QUANITGROBEST » Wed 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
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Wed 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.

User avatar
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Posts: 227
Joined: Thu 11/10/2012 9:47 am
Location: Thái Bình
Has thanked: 78 times
Been thanked: 24 times
Contact:

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

Postby QUANITGROBEST » Wed 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
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Wed 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);

User avatar
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Posts: 227
Joined: Thu 11/10/2012 9:47 am
Location: Thái Bình
Has thanked: 78 times
Been thanked: 24 times
Contact:

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

Postby QUANITGROBEST » Thu 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
[vbnet]<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Server" value="serverq\192.168.2.160"/>
<add key="Database" value="Grobest"/>
<add key="Username" value="sa"/>
<add key="Password" value="*Ab123456"/>
</appSettings>
</configuration>[/vbnet]
http://grobest.com.vn/[url]spasenhong.vn[/url]

FlyingFox
Guru
Guru
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Thu 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à.
Attachments
DemoApplication.zip
(58.28 KiB) Downloaded 318 times

User avatar
QUANITGROBEST
Thành viên trung thành
Thành viên trung thành
Posts: 227
Joined: Thu 11/10/2012 9:47 am
Location: Thái Bình
Has thanked: 78 times
Been thanked: 24 times
Contact:

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

Postby QUANITGROBEST » Thu 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
Posts: 167
Joined: Tue 18/05/2010 11:49 pm
Has thanked: 7 times

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

Postby thinh18tt » Mon 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
Posts: 814
Joined: Wed 20/04/2011 9:56 am
Been thanked: 323 times

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

Postby FlyingFox » Mon 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


Return to “[.NET] Module, Class, UserControl, DLL”

Who is online

Users browsing this forum: No registered users and 1 guest