[C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Các bài viết hướng dẫn về Visual Basic .NET và C#

Các điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

[C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by anhtuyenbk »

Tên bài viết: C# và SQL Server 2005
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: Cơ bản
Tóm tắt: Các thao tác cơ bản C# với SQL Server 2005
C# và SQL Server 2005

Hiện nay, ngoài Access, hệ quản trị cơ sở dữ liệu SQL Server được sử dụng rất phổ biến. Bài này sẽ đề cập đến các thao tác cơ bản giữa C# và SQL Server.
Để sử dụng đươc bài hướng dẫn này các bạn hãy tải file Database backup nằm ở trang đầu tiên này và restore nó vào SQL Server của mình.
Database này có tên là SampleTest bên trong có một Table tên là Danhsach..
Bảng này gồm có năm cột
STT : kiểu int
Name, Address, Phone, Email có kiểu là ntext.

1. Namespace cần thiết :
Để có thể thao tác tốt với SQL Server chúng ta nên sử dụng namespace.

Mã: Chọn tất cả

    using System.Data;using System.Data.SqlClient;//Namespace dùng cho SQL
2. Kết nối với SQL Server
Để có thể kết nối chúng ta phải tạo ra chuỗi kết nối Connection String cung cấp cho nó đầy đủ các thành phần sau

Mã: Chọn tất cả

Server hay Data Source = tên máy chủ\tên thể hiện của máy chủ SQL    Database hay Intial Catalog = Tên của Database mà mình định truy xuất trong SQL.    User id = Tên người sử dụng    Password = Mật mã bảo vệ    Integrated Security=SSPI hay true// bảo mật    Persist Security Info=False // Không trả về thông tin bảo mật
Ví dụ:

Mã: Chọn tất cả

String varConnect = @"Data Source=servercomputer\sqlexpress;" +                                    "database=SampleTest;" +                                    "User ID =sa;"+                                    "Password =;" +                                    "Integrated Security=SSPI;" +                                    "Persist Security info =false";
Trong đó Servercomputer là tên máy tính của mình, SqlExpress là 1 thể hiện của máy chủ sql. Do đó bạn phải chỉnh sử lại cho phù hợp với máy của mình.
SampleTest là cơ sở dữ liệu mẫu được restore lại trong SQL.
Để tạo kết nối chúng ta dùng lớp SqlConnection.
Code hoàn chỉnh tạo kết nối và hủy kết nối;

Mã: Chọn tất cả

SqlConnection objConnect;        #region "Tạo kết nối và hủy kết nối"            /// <summary>            /// Tạo kết nối            /// </summary>            private void subCreateConnect()            {                String varConnect = @"Data Source=servercomputer\sqlexpress;" +                                    "database=SampleTest;" +                                    "User ID =sa;"+                                    "Password =;" +                                    "Integrated Security=SSPI;" +                                    "Persist Security info =false";                objConnect = new SqlConnection(varConnect);                objConnect.Open();            }            /// <summary>            /// Hủy kết nối            /// </summary>            private void subDestroyConnect()            {                objConnect.Close();                objConnect.Dispose();                objConnect = null;            }        #endregion
Sửa lần cuối bởi 4 vào ngày anhtuyenbk với 0 lần sửa trong tổng số.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [C#] **C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by anhtuyenbk »

3. Truy xuất dữ liệu trong SQL

3.1 Truy xuất dữ liệu bằng SQL trực tiếp có truyền tham số
Dùng SqlCommand để thực thi câu lệnh SQL.
Ở đây ta sẽ dùng SqlDataReader để đọc dữ liệu với tốc độ nhanh.

Mã: Chọn tất cả

private void subSelectBySQLTruyềnthamsố()            {                subCreateConnect();                //Lệnh cần thúc hiện                SqlCommand objCommand = new SqlCommand();                objCommand.Connection = objConnect;                objCommand.CommandText = "Select * from Danhsach where STT>@STT";                objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 3;                SqlDataReader objReader = objCommand.ExecuteReader();                DataTable objTable = new DataTable();                objTable.Load(objReader);                DGSQL.DataSource = objTable;                //Hủy đối tượng                objCommand.Dispose();                objCommand = null;                objTable.Dispose();                objTable = null;                subDestroyConnect();                            }
3.2 Truy xuất dữ liệu thông quan Adapter
Ở đây ta sẽ dùng SqlDataAdapter để thực thi command và dữ liệu lấy về sẽ được điền vào Datatable thông qua Fill.

Mã: Chọn tất cả

private void subSelectBySQLAdapter()            {                subCreateConnect();                //Command                SqlCommand objCommand = new SqlCommand();                objCommand.Connection = objConnect;                objCommand.CommandText = "Select * from Danhsach where STT>@STT";                objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 4;                //SqlAdapter                SqlDataAdapter objAdapter = new SqlDataAdapter();                objAdapter.SelectCommand = objCommand;                                           DataTable objTable = new DataTable();                objAdapter.Fill(objTable);                DGSQL.DataSource = objTable;                //Hủy đối tượng                objCommand.Dispose();                objCommand = null;                objTable.Dispose();                objTable = null;                objAdapter.Dispose();                objAdapter=null;                subDestroyConnect();                                            }
4. Binhding DataGridView với Textbox
Có nhiệm vụ khi ta clịck vào dòng nào trong DataGridView thì các dữ liệu trên dòng đó sẽ hiển thị trên Textbox.

Mã: Chọn tất cả

private void subDatabinding()        {            txtSTT.DataBindings.Clear();            txtSTT.DataBindings.Add("Text", DGSQL.DataSource, "STT");            txtName.DataBindings.Clear();            txtName.DataBindings.Add("Text", DGSQL.DataSource, "Name");            txtAddress.DataBindings.Clear();            txtAddress.DataBindings.Add("Text", DGSQL.DataSource, "Address");            txtPhone.DataBindings.Clear();            txtPhone.DataBindings.Add("Text", DGSQL.DataSource, "Phone");            txtEmail.DataBindings.Clear();            txtEmail.DataBindings.Add("Text", DGSQL.DataSource, "Phone");                    }
Sửa lần cuối bởi 1 vào ngày anhtuyenbk với 0 lần sửa trong tổng số.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [C#] **C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by anhtuyenbk »

5. Insert 1 Record vào trong Table

5.1 Insert dữ liệu vào Table bằng SQL trực tiếp có truyền tham số

Mã: Chọn tất cả

private void subInsertDulieucótruyềnthamsố()            {                subCreateConnect();                //Command                SqlCommand objCommand = new SqlCommand();                objCommand.Connection = objConnect;                objCommand.CommandType = CommandType.Text;                objCommand.CommandText = "Insert into Danhsach Values (@STT,@Name,@Address, @Phone, @Email)";                //THam số                objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = Convert.ToInt32(txtSTT.Text);                objCommand.Parameters.Add("@Name", SqlDbType.NText).Value = txtName.Text;                   objCommand.Parameters.Add("@Address", SqlDbType.NText).Value = txtAddress.Text;                objCommand.Parameters.Add("@Phone", SqlDbType.NText).Value = txtPhone.Text;                objCommand.Parameters.Add("@Email", SqlDbType.NText).Value = txtEmail.Text;                                objCommand.ExecuteNonQuery();                //Hueỷ đối tượng                objCommand.Dispose();                objCommand = null;                                subDestroyConnect();                            }
Dùng objCommand.ExecuteNonQuery(); để thực thi command.

5.2 Insert dữ liệu vào Table thông qua Adapter
Để Insert được 1 record mới vào trong table thông qua Adapter thì đầu tiên ta phải Insert thêm 1 dòng mới vào trong Table trước.

Mã: Chọn tất cả

private void subInsertDữliệuByAdapter()            {                subCreateConnect();                //Command                SqlCommand objCommand = new SqlCommand();                objCommand.Connection = objConnect;                objCommand.CommandText = "Select * from Danhsach where STT>@STT";                objCommand.Parameters.Add("@STT", SqlDbType.Int).Value = 4;                //SqlAdapter                SqlDataAdapter objAdapter = new SqlDataAdapter();                objAdapter.SelectCommand = objCommand;                DataTable objTable = new DataTable();                objAdapter.Fill(objTable);                //Insert 1 dòng mới vào DataTable                DataRow objRow = objTable.NewRow();                objRow["STT"] = Convert.ToInt32(txtSTT.Text);                objRow["Name"] = txtName.Text;                objRow["Address"] = txtAddress.Text;                objRow["Phone"] = txtPhone.Text;                objRow["Email"] = txtEmail.Text;                objTable.Rows.Add(objRow);                //Tạo command để Insert dữ liệu vào Database nguồn                objCommand = new SqlCommand();                objCommand.Connection = objConnect;                objCommand.CommandType = CommandType.Text;                objCommand.CommandText = "Insert into Danhsach Values (@STT,@Name,@Address, @Phone, @Email)";                //THam số                objCommand.Parameters.Add("@STT", SqlDbType.Int,5,"STT");                objCommand.Parameters.Add("@Name", SqlDbType.NText,30,"Name");                objCommand.Parameters.Add("@Address", SqlDbType.NText,30,"Address");                objCommand.Parameters.Add("@Phone", SqlDbType.NText,10,"Phone");                objCommand.Parameters.Add("@Email", SqlDbType.NText,30,"Email");                //Update dòng mới vào nguồn                objAdapter.InsertCommand = objCommand;                objAdapter.Update(objTable);                //Hủy đối tượng                objCommand.Dispose();                objCommand = null;                objTable.Dispose();                objTable = null;                objAdapter.Dispose();                objAdapter = null;                subDestroyConnect();                            } 
Dùng objAdapter.Update(objTable); để update record mới vào Table nguồn.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
binhclubman
Thành viên chính thức
Thành viên chính thức
Bài viết: 29
Ngày tham gia: Thứ 5 23/10/2008 3:21 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by binhclubman »

Thank you pa'c anhtuyen nhìu. bài này giúp ích tui nhiều lắm.
Code bằng EmEditor rất tuyệt
minhhoang010186
Bài viết: 4
Ngày tham gia: Thứ 2 23/02/2009 5:02 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by minhhoang010186 »

Mình dùng chuỗi này thì connect qua mạng LAN vẫn không được:
string strConn = "Server=ViDu;Database=Ok;Integrated Security=false;";
(ViDu là tên server mà mình muốn kết nối tới, có địa chỉ IP là 192.168.1.1, Ok là CSDL mà mình cần dùng)

Ai có thể cho mình biết tại sao không connect qua mạng LAN được không? Hichic :(( =(( :-/ @-)
Hình đại diện của thành viên
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: Thứ 4 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 27 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by tungcan5diop »

minhhoang010186 đã viết:Mình dùng chuỗi này thì connect qua mạng LAN vẫn không được:
string strConn = "Server=ViDu;Database=Ok;Integrated Security=false;";
(ViDu là tên server mà mình muốn kết nối tới, có địa chỉ IP là 192.168.1.1, Ok là CSDL mà mình cần dùng)

Ai có thể cho mình biết tại sao không connect qua mạng LAN được không? Hichic :(( =(( :-/ @-)
bạn dùng Vb.net hay C# vậy...kết nối qua Server sao mình ko thấy bạn để User,Pwd....bạn xem lại coi sao :-/
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!
minhhoang010186
Bài viết: 4
Ngày tham gia: Thứ 2 23/02/2009 5:02 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by minhhoang010186 »

Tiêu đề là C# mà bạn. Mình connect qua Window Authentication nên đâu cần user và pass đâu
Hình đại diện của thành viên
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Bài viết: 1123
Ngày tham gia: Thứ 4 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 27 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by tungcan5diop »

minhhoang010186 đã viết:Tiêu đề là C# mà bạn. Mình connect qua Window Authentication nên đâu cần user và pass đâu
bạn tham khảo ở đây nè
http://www.connectionstrings.com/sql-server-2005
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!
hghkht
Bài viết: 4
Ngày tham gia: Thứ 5 21/05/2009 12:41 am

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by hghkht »

Mình đã kết nối được với CSDL rồi. Nhưng bây giờ mình muốn đưa dữ liệu từ một bảng (hay nhiều bảng) trong CSDL lên Listview hay Datagridview thì làm thế nào? Mong các bác hướng dẫn cách làm.
powermax
Bài viết: 1
Ngày tham gia: Thứ 6 14/08/2009 4:03 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by powermax »

Anh có thể post source code bài này lên được không? Em đang cần Source code hoàn chỉnh của bài này để làm mẫu tham khảo.
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by anhtuyenbk »

Mục đich bài Tut là để các bạn tự thực hành, do đó ko có post project.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
vuhuy_slcity
Bài viết: 1
Ngày tham gia: Thứ 4 22/04/2009 8:50 am

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by vuhuy_slcity »

Anh tuyên . em mới học C# bây giờ tạo được cơ sở dữ liệu bằng SQL server 2005 rồi nhưng mà không thể nào kết nối tới máy khác được ( Cơ sở dữ liệu để ở máy bạn trong mạng lan có IP ) . nếu đặt tại máy em thì kết nối ổn . nhưng chuyển sang máy khác không cho kết nối . Bên máy đó nếu chạy cơ sở dữ liệu trên máy cũng vẫn bình thường . chuỗi kết nối của em :

Mã: Chọn tất cả

 public static string con = "Data Source=192.168.1.8\\SQLEXPRESS;AttachDbFilename=E:\\Toedit_examquestion.mdf;Integrated Security=True;Connect Timeout=30;User Instance=False";
192.168.1.8 là IP máy bạn em . mọi người giúp em với.
Hình đại diện của thành viên
akira
Thành viên danh dự
Thành viên danh dự
Bài viết: 354
Ngày tham gia: Thứ 7 25/10/2008 11:11 pm
Has thanked: 6 times
Been thanked: 69 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by akira »

em hơi gà nên hỏi một câu: việc nhồi dữ liệu trực tiếp và nhồi dữ liệu thông qua Adapter thì khác nhau chỗ nào ạ? cách nhồi nhét nào là an toàn hơn cho CSDL ạ?
tuanhoaitan
Bài viết: 1
Ngày tham gia: Chủ nhật 08/03/2009 10:57 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by tuanhoaitan »

E có một combobox chứa danh sách các phòng ban.Có một datagrid ,khi em chọn 1 phòng ban từ combobox thì sẽ hiển thị những nhân viên của phòng ban đóa như địa chỉ,tên,ngày sinh.................
Mong mọi người giúp đỡ.Thank
HaiPT
VIP
VIP
Bài viết: 259
Ngày tham gia: Thứ 4 07/09/2005 4:02 pm
Has thanked: 3 times
Been thanked: 14 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by HaiPT »

minhhoang010186 đã viết:Mình dùng chuỗi này thì connect qua mạng LAN vẫn không được:
string strConn = "Server=ViDu;Database=Ok;Integrated Security=false;";
(ViDu là tên server mà mình muốn kết nối tới, có địa chỉ IP là 192.168.1.1, Ok là CSDL mà mình cần dùng)

Ai có thể cho mình biết tại sao không connect qua mạng LAN được không? Hichic :(( =(( :-/ @-)
Cấu hình mặc định của SQL2005 là "Local only", do vậy bạn phải vào "SQL Server Surface Area Configuration" để bật chế độ
"Local and remote connection"
HaiPT
VIP
VIP
Bài viết: 259
Ngày tham gia: Thứ 4 07/09/2005 4:02 pm
Has thanked: 3 times
Been thanked: 14 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by HaiPT »

akira đã viết:em hơi gà nên hỏi một câu: việc nhồi dữ liệu trực tiếp và nhồi dữ liệu thông qua Adapter thì khác nhau chỗ nào ạ? cách nhồi nhét nào là an toàn hơn cho CSDL ạ?
Nhồi dữ liệu trực tiếp ở đây là gì ??
ý của em chắc là dùng SqlCommand , sau đó thực thi các query hoặc các sql statement ??
Hiện tại dùng ADO.NET có hai cách thực truy cập dữ liệu:
1 - Dùng SqldataAdapter
2 - Dùng SqlCommand
Hai cách này có những điểm khác biệt như sau :

Dùng SlqCommand gần với cách truy xuất cổ điển từ ADO 2.X, đây mô hình duy trì kết nối thường trực ( connected model), để dùng command bạn phải quản lý việc khởi tạo , mở và đóng các connection
DataAdapter ngược lại chính là mô hình kết nối không thường trực ( disconected model ) , bạn không cần phải lo việc quản lý , đóng mở các connection, mỗi khi dữ liệu được lấy về và fill vào 1 Dataset, datatatable thì connection sẽ được tự động đóng,Ngoài ra DataAdapter còn là 1 object rất mạnh mẽ, hỗ trợ hầu hết các thao tác cần thiết với CSDL như batch update, transaction..etc
Hình đại diện của thành viên
akira
Thành viên danh dự
Thành viên danh dự
Bài viết: 354
Ngày tham gia: Thứ 7 25/10/2008 11:11 pm
Has thanked: 6 times
Been thanked: 69 times

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by akira »

HaiPT đã viết: ý của em chắc là dùng SqlCommand , sau đó thực thi các query hoặc các sql statement ??
dạ đúng rồi anh. anh cho em hỏi cách dùng SqlCommand với SqldataAdapter thì cách nào an toàn cho dữ liệu hơn anh ha?
thằng bạn em nó nói xài SqldataAdapter cho pro, an toàn. an toàn thì em ko rõ nhưng em chả thấy pro chút nào khi chỉ cần select, insert, delete. SqldataAdapter trong trường hợp này giống cầm dao mổ trâu đi giết ruồi quá.
cham3cham
Bài viết: 4
Ngày tham gia: Thứ 5 29/10/2009 2:31 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by cham3cham »

Bro cho mình đao phần code với! không tìm thấy đâu cả! [-O<
huusang5287
Bài viết: 1
Ngày tham gia: Thứ 6 25/06/2010 5:31 pm

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by huusang5287 »

khi kêt nối sql 2005 thì mình bị lỗi này:
A connection was successfully established with the server, but then an error occurred during the pre-login handshake.(provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)"
Rất mong được mọi người giúp đỡ. Cám ơn mọi người!
Hình đại diện của thành viên
tiger86love102
Thành viên danh dự
Thành viên danh dự
Bài viết: 610
Ngày tham gia: Chủ nhật 19/10/2008 1:10 am
Đến từ: http://ready.vn
Has thanked: 4 times
Been thanked: 21 times
Tiếp xúc:

Re: [C#] C# và SQL Server 2005 - Sự kết hợp hoàn hảo

Gửi bài by tiger86love102 »

Lạ nhỉ :-?
Ngày xửa ngày xưa tiger cần VB.NET với access thì anh Tuyên có ngay bài [VB.NET]làm việc với csdl access.
Ngày nảy ngày nay tiger cần C# với sql server 2005 thì anh Tuyên đã cho ra lò bài này.
Hay quá :D
Một phiếu THANKS to tướng cho anh Tuyên :D
Đội bóng Ready
facebook.com/tiger86love102
Đăng trả lời

Quay về