• 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

Căn Bản Về Kết Nối CSDL SQL trong C#

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

Moderators: tungcan5diop, QUANITGROBEST

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Căn Bản Về Kết Nối CSDL SQL trong C#

Postby vuathongtin » Thu 15/07/2010 4:39 pm

Tên bài viết: Căn Bản Về Kết Nối CSDL SQL trong C#
Tác giả: vuathongtin
Cấp độ bài viết: Căn Bản
Tóm tắt:



Chú ý : C# ko hỗ trợ dấu " & " ==> kết nối 2 chuỗi bạn phải dùng "+"

1. Khai báo :
1.1. Khai báo Namespace kết nối CSDL

Code: Select all

using System.Data.OleDb ; // đối với CSDL là access

hoặc :

Code: Select all

using System.Data.SqlClient; // đối với CSDL SQL

1.2. khai báo 3 biến cơ bản dùng để Kết nối CSDL
  1.  SqlDataAdapter da=new SqlDataAdapter() ;
  2.    SqlConnection con = new SqlConnection();
  3.   DataTable dt=new DataTable() ;


2 . Tạo Kết nối :
[csharp]void ketnoi()
{
if (con.State == ConnectionState.Closed)
{
con.ConnectionString = "<Provider của CSDL>";
con.Open();
}
}[/csharp]

// Provider có thể tìm thấy ở : http://www.connectionstrings.com/

ví dụ : Đối với CSDL là SQL
[csharp]void ketnoi()
{
if (con.State == ConnectionState.Closed)
{
con.ConnectionString = "Server=(local);database=<tên CSDL>;user ID=sa;password=sa";
con.Open();
}
}
// sa là tài khoản mặc định trong SQL server[/csharp]

ví dụ : tên CSDL là QLDIEM

Hoặc : đối với CSDL là access
[csharp]void ketnoi()
{
if (con.State == ConnectionState.Closed)
{
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + " data source= " + Application.StartupPath + "/QUAN_LY_SINH_VIEN.mdb";
con.Open();
}
}[/csharp]

3. Load dữ liệu vào datatable, datagridview, textbox,...
datatable :

Code: Select all

 da.fill(dt);


datagridview:

Code: Select all

datagridview1.DataSource = dt;


Lấy dữ liệu từ datagridview ra ngoài :
Viết code cho các sự kiện RowHeaderMouseClick,...
[vbnet]int i = int.Parse(e.RowIndex.ToString());
this.Textbox1.Text = this.Datagridview.Rows.Cells[0].Value.ToString();[/vbnet]
[i]Hoặc có thể dùng datatable:

[vbnet]this.Textbox1.Text = dt.Rows[0].ToString();[/vbnet]

textbox :

Code: Select all

textbox1.Databindings.add(new Binding("text",datatable,"<field hiển thị>");

[i]ví dụ:

Code: Select all

 txt_masv.DataBindings.Add(new Binding("text", dt_sinhvien, "MaSV"));


datetimepicker :

Code: Select all

datetimepicker .add(new Binding("value",datatable,"<field hiển thị>");

ví dụ :

Code: Select all

datetimepicker .add(new Binding("value",datatable,"NgaySinh");


combobox :
[csharp]cbo.DataSource = dt;
cbo.ValueMember="datamember";// giá trị Items của combobox
cbo.DisplayMember ="datamember; // tên hiển thị Items[/csharp]

ví dụ :
[csharp] cbo_lop.DataSource = dt_sinhvien;
cbo_lop.DisplayMember = "TenLop";
cbo_lop.ValueMember="MaLop";[/csharp]

Giải thích: dữ liệu hiển thị trên cbo là "TenLop" nhưng giá trị nhận đc khi thao tác (click) items của combobox là "MaLop" --> từ từ sẽ hiểu :D

4. Next, Previous, Last, First, Count
Cách 1 : Dùng "BindingContext "
' Next

Code: Select all

this.BindingContext[dt].Position += 1;


' Previous

Code: Select all

this.BindingContext[dt].Position -= 1;


' Last

Code: Select all

Me.BindingContext[dt].Position = Me.BindingContext.Item(dt).Count - 1;


' First

Code: Select all

C1:  DataGridView1.CurrentCell = DataGridView1["tên hàng", 0];

Code: Select all

ví dụ : this.dgv_sinhvien.CurrentCell = dgv_sinhvien["MaSV", 0];


Code: Select all

C2:  this.BindingContext[dt_sinhvien].Position = 0;


Cách 2 : Dùng "Bindingsource"
ví dụ : Khi viết code cho button " Next"
[csharp] BindingSource binding=new BindingSource();
binding.DataSource =dt ;
DataGridView1.DataSource =binding ;
binding.MoveNext();[/csharp]

--> Ý nghĩa : BindingSoure cung cấp các phương thức "MoveNext, MoveFirst,.." , ta chỉ việc khai báo datasource của gián tiếp với dt thông qua DataGridView1Bindingsource là sử dụng đc các giao thức đó

' Count

Code: Select all

dt.Rows.Count


6. Thêm - Xóa - Sửa
6.1. Thêm :
6.1.1. : Phương pháp : Dùng Commandbuider để thực thi những thay đổi trong datatable
B1 : Khởi tạo hàng mới trong datable

Code: Select all

DataRow newrow=dt.NewRow();

B2 : đưa dữ liệu vào hàng mới tạo,
[csharp]newrow["<field>"] = <dữ liệu cần thêm>;
...................................................................
dt.Rows.Add(newrow);
[/csharp]
B3 : dùng commanbuider thực thi những thay đổi trong datatable
[csharp] SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Update(dt);
cb.Dispose();[/csharp]
ví dụ :
[csharp]void them()
{
DataRow newrow = dt_sinhvien.NewRow();
newrow["Masv"] = txt_masv.Text;
newrow["HoTen"] = txt_hoten.Text;
newrow["NgaySinh"] = dtp_ngaysinh.Value;
newrow["QueQuan"] = txt_qq.Text;
newrow["MaLop"] = cbo_lop.SelectedValue;
dt_sinhvien.Rows.Add(newrow);

SqlCommandBuilder cb = new SqlCommandBuilder(da_sinhvien);
da_sinhvien.Update(dt_sinhvien);
cb.Dispose();
MessageBox.Show("xong");
}[/csharp]

6.2. Xóa:
6.3.1. Phương pháp 1: Dùng ExecuteNonQuery() hoặc ExecuteScalar() để thực thi trực tiếp command SQl vào CSDL
[vbnet]void xoa()
{
SqlCommand cmd = new SqlCommand(<lệnh SQL xóa >, con);
cmd.ExecuteNonQuery();
cmd.Dispose();
}[/vbnet]

ví dụ :
[csharp]void xoa()
{
DataRow row = dt_sinhvien.Select("MaSV = '" + txt_masv.Text + "'")[0];
SqlCommand cmd = new SqlCommand("delete from tbl_SinhVien where MaSV='" + txt_masv.Text + "'", con);
cmd.ExecuteNonQuery();
row.Delete();
cmd.Dispose();
MessageBox.Show("Xóa xong");

}[/csharp]

6.3. Sửa :
6.3.1. Phương pháp 1: Dùng câu lệnh thực thi ExecuteNonQuery
[csharp] string sql= "Update <tên table> set field1= 'giá trị 1', field2= 'giá trị 2',....."
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();[/csharp]
ví dụ :
[csharp]void sua()
{
string sql ;
sql= "update tbl_SinhVien set MaSV='" + txt_masv .Text + "',HoTen='" + txt_hoten.Text + "',NgaySinh='" + dtp_ngaysinh.Value + "',MaLop='" + cbo_lop.SelectedValue + "',QueQuan='" + txt_qq.Text + "'";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
MessageBox .Show ("Sửa xong");
}[/csharp]

p/s: Mong được sự góp ý của mọi người để bài viết hoàn thiện hơn. :)
Last edited by vuathongtin on Wed 11/08/2010 9:52 pm, edited 3 times in total.


Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby vo_minhdat2007 » Thu 15/07/2010 4:51 pm

Sao phải tách ra khi VB.NET và C# đều như nhau?

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby vuathongtin » Thu 15/07/2010 5:00 pm

Có những nét giống nhưng cũng có nét khác đấy bạn ạ.
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

bibio2
Posts: 1
Joined: Wed 19/11/2008 1:04 pm

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby bibio2 » Mon 19/07/2010 1:52 pm

Tôi nghĩ bạn nên tổ chức lại như vầy nè, như thế bạn sẽ có thề dùng lại nó.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.SqlClient;
  7. using System.Data.OleDb;
  8. using System.Configuration;
  9. using System.IO;
  10. namespace ConfigGui
  11. {
  12.     public class Ketnoi
  13.     {
  14.         public static string SERVER;
  15.         public static string USERNAME;
  16.         public static string PASSWORD;
  17.         public static string DATABASENAME;
  18.         static Ketnoi()
  19.         {
  20.            
  21.         }
  22.  
  23.  
  24.         #region Properties
  25.         private System.Data.Common.DbConnection mConnection;
  26.  
  27.         public DbConnection Connection
  28.         {
  29.             get { return mConnection; }
  30.             set { mConnection = value; }
  31.  
  32.         }
  33.  
  34.         private string mConString;
  35.  
  36.         public string ConnectionString
  37.         {
  38.             get { return mConString; }
  39.             set { mConString = value; }
  40.         }
  41.  
  42.         private DbTransaction mTransaction;
  43.  
  44.         public DbTransaction Transaction
  45.         {
  46.             get { return mTransaction; }
  47.             set { mTransaction = value; }
  48.         }
  49.        private ConnectionState mState;
  50.  
  51.         public ConnectionState State
  52.         {
  53.             get { return mConnection.State; }
  54.  
  55.         }
  56.         #endregion
  57.         #region Constructors
  58.  
  59.         public Ketnoi()
  60.         {
  61.  
  62.             try
  63.             {
  64.                 DbConnectionStringBuilder builder;
  65.                 mFactory = DbProviderFactories.GetFactory(Provider);
  66.  
  67.                 builder = mFactory.CreateConnectionStringBuilder();
  68.  
  69.                 builder.Add("User Id", Ketnoi.USERNAME);
  70.                 builder.Add("Password", Ketnoi.PASSWORD);
  71.                 builder.Add("Connection Timeout", 60);
  72.                 if (mFactory is OleDbFactory)
  73.                 {
  74.                     builder.Add("Data Source", Ketnoi.DATABASENAME);
  75.                     builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
  76.                 }
  77.                 else
  78.                 {
  79.                     builder.Add("Server", Ketnoi.SERVER);
  80.                     builder.Add("Database", Ketnoi.DATABASENAME);
  81.                 }
  82.  
  83.                 mConnection = mFactory.CreateConnection();
  84.                 mConnection.ConnectionString = builder.ConnectionString;
  85.             }
  86.             catch { }
  87.             //}
  88.         }
  89.      
  90.         public Ketnoi(string ConnectionString,string providerName)
  91.         {
  92.             mFactory = DbProviderFactories.GetFactory(providerName);
  93.             mConnection = mFactory.CreateConnection();
  94.             mConnection.ConnectionString = ConnectionString;
  95.            
  96.         }
  97.         #endregion
  98.  
  99.         #region Methods
  100.         public DbCommand CreateCommand()
  101.         {
  102.             DbCommand cmd = mFactory.CreateCommand();
  103.             cmd.Connection = mConnection;
  104.             return cmd;
  105.         }
  106.  
  107.         public DbDataAdapter CreateAdapter()
  108.         {
  109.             return mFactory.CreateDataAdapter();
  110.         }
  111.      
  112.         public int ExecuteNonQuery(string cmdText)
  113.         {
  114.             try
  115.             {
  116.                 DbCommand cmd = CreateCommand();
  117.                 cmd.CommandText = cmdText;
  118.                 return this.ExecuteNonQuery(cmd);
  119.             }
  120.             catch (DbException e)
  121.             {
  122.                
  123.                 throw e;
  124.             }
  125.         }
  126.         public int ExecuteNonQuery(DbCommand cmd)
  127.         {
  128.             try
  129.             {
  130.                 this.Open();
  131.                 cmd.Transaction = mTransaction;
  132.                 cmd.ExecuteNonQuery();
  133.                 return 0;
  134.             }
  135.             catch (Exception e)
  136.             {
  137.                 if (e is DbException)
  138.                 {
  139.                         return -1100;
  140.                 }
  141.                 else
  142.                     throw e;
  143.                 //return -1;
  144.  
  145.             }
  146.            
  147.  
  148.         }
  149.         /// <summary>
  150.         /// Executes a command text and returns a DataTable
  151.         /// </summary>
  152.         /// <param name="cmdText">Command Text to execute</param>
  153.         /// <returns>Result DataTable</returns>
  154.         public DataTable ExecuteTable(string cmdText)
  155.         {
  156.             try
  157.             {
  158.                 DbCommand cmd = CreateCommand();
  159.                 cmd.CommandText = cmdText;
  160.                 return this.ExecuteTable(cmd);
  161.             }
  162.             catch (DbException e)
  163.             {
  164.  
  165.                 throw e;
  166.             }
  167.            
  168.         }
  169.  
  170.         public DataTable ExecuteTable(DbCommand cmd)
  171.         {
  172.             try
  173.             {
  174.                 cmd.Transaction = mTransaction;
  175.                 this.Open();
  176.                 DbDataAdapter adp = mFactory.CreateDataAdapter();
  177.                 DataTable dt = new DataTable();
  178.                 adp.SelectCommand = cmd;
  179.                 adp.Fill(dt);
  180.                 adp.Dispose();
  181.                 return dt;
  182.             }
  183.             catch (DbException e)
  184.             {
  185.  
  186.                 throw e;
  187.             }
  188.            
  189.         }
  190.  
  191.         /// <summary>
  192.         /// Executes a command text and returns a DataSet
  193.         /// </summary>
  194.         /// <param name="cmdText">Command text to execute</param>
  195.         /// <returns>DataSet</returns>
  196.         public DataSet ExecuteDataSet(string cmdText)
  197.         {
  198.             try
  199.             {
  200.                 DbCommand cmd = CreateCommand();
  201.                 cmd.CommandText = cmdText;
  202.                 return this.ExecuteDataSet(cmd);
  203.             }
  204.             catch (DbException e)
  205.             {
  206.  
  207.                 throw e;
  208.             }
  209.         }
  210.         public DataSet ExecuteDataSet(DbCommand cmd)
  211.         {
  212.             try
  213.             {
  214.                 this.Open();
  215.                 DbDataAdapter adp = mFactory.CreateDataAdapter();
  216.                 DataSet ds = new DataSet();
  217.                 adp.SelectCommand = cmd;
  218.                 adp.Fill(ds);
  219.                 adp.Dispose();
  220.                 return ds;
  221.             }
  222.             catch (DbException e)
  223.             {
  224.  
  225.                 throw e;
  226.             }
  227.         }
  228.        
  229.         /// <summary>
  230.         /// Executes a command text and return a Scalar value
  231.         /// </summary>
  232.         /// <param name="cmdText">Command text to execute</param>
  233.         /// <returns>Scalar value</returns>
  234.         public object ExecuteScalar(string cmdText)
  235.         {
  236.             try
  237.             {
  238.                 DbCommand cmd = CreateCommand();
  239.                 cmd.CommandText = cmdText;
  240.                 return this.ExecuteScalar(cmd);
  241.             }
  242.             catch (DbException e)
  243.             {
  244.  
  245.                 throw e;
  246.             }
  247.         }
  248.         public object ExecuteScalar(DbCommand cmd)
  249.         {
  250.             try
  251.             {
  252.                 this.Open();
  253.                 cmd.Transaction = mTransaction;
  254.                 return cmd.ExecuteScalar();
  255.             }
  256.             catch (DbException e)
  257.             {
  258.  
  259.                 throw e;
  260.             }
  261.            
  262.         }
  263.  
  264.         /// <summary>
  265.         /// Executes a command text and returns a DataReader
  266.         /// </summary>
  267.         /// <param name="cmdText"></param>
  268.         /// <returns></returns>
  269.         public DbDataReader ExecuteReader(string cmdText)
  270.         {
  271.             try
  272.             {
  273.                 DbCommand cmd = CreateCommand();
  274.                
  275.                 cmd.CommandText = cmdText;
  276.                 return this.ExecuteReader(cmd);
  277.             }
  278.             catch (DbException e)
  279.             {
  280.  
  281.                 throw e;
  282.             }
  283.         }
  284.         public DbDataReader ExecuteReader(DbCommand cmd)
  285.         {
  286.             try
  287.             {
  288.                 this.Open();
  289.                 cmd.Transaction = mTransaction;
  290.                 return cmd.ExecuteReader();
  291.             }
  292.             catch (DbException e)
  293.             {
  294.  
  295.                 throw e;
  296.             }
  297.  
  298.         }
  299.                
  300.         public DbDataReader ExecuteReader(DbCommand cmd,CommandBehavior cobe)
  301.         {
  302.             try
  303.             {
  304.                 return cmd.ExecuteReader(cobe);
  305.             }
  306.             catch (DbException e)
  307.             {
  308.  
  309.                 throw e;
  310.             }
  311.         }
  312.  
  313.    
  314.      
  315.  
  316.         public void Open()
  317.         {
  318.             if (mConnection.State!= ConnectionState.Open)            
  319.                 mConnection.Open();
  320.            
  321.         }
  322.  
  323.         public void Close()
  324.         {
  325.             if ((mConnection.State == ConnectionState.Open) && mTransaction==null)
  326.                 mConnection.Close();
  327.            
  328.         }
  329.  
  330.        
  331.  
  332.         #endregion
  333.  
  334.     }
  335.  
  336. }



chỉ cần dùng lớp này dể connect Data cho toàn bộ dự án của bạn.
[mod=vo_minhdat2007]Cho code vào thẻ ngôn ngữ tương ứng[/mod]

User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby vuathongtin » Mon 19/07/2010 4:05 pm

Rất cảm ơn ý kiến đóng góp của bạn. Mục đích bài viết của mình là để mọi người nắm bắt được cách thức cơ bản khi làm 1 chương trình có kết nối CSDL và nhất là giành cho những bạn tự học.
Khi nắm bắt những kiến thức cơ bản đó thì các bạn sẽ dễ dàng hiểu đc và sử dụng tốt Class của bạn.

P/s : bạn nên cho code vào thẻ. (Nếu mod có rảnh thì giúp bạn ấy cho code vào thẻ nhen :) )
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online

User avatar
vie87vn
Thành viên tích cực
Thành viên tích cực
Posts: 150
Joined: Sat 05/04/2008 10:15 am
Location: Quán Đôi - Củ Chi
Been thanked: 2 times
Contact:

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby vie87vn » Wed 21/07/2010 9:31 pm

Bài viết hay ta! Cách trình bày của bạn rất rõ ràng và dễ hiểu. Mặc dù máy mình "kùi pép", không chạy dc C# nhưng nhìn vô mình cũng hình dung được. Hi vọng bạn có nhiều như thế này!
Hoàng Sa và Trường Sa là của Việt Nam.

carrotkg2003
Posts: 3
Joined: Thu 19/12/2013 8:47 am

Re: Căn Bản Về Kết Nối CSDL SQL trong C#

Postby carrotkg2003 » Thu 19/12/2013 10:39 am

Xin chào các Anh, Chị!
Mình tên Thuận là thành viên mới gia nhập, hiện mình đang bước vào tập viết code Vb 2005 và SQL2008, nhưng mình không kết nối với csdl SQL được. Mình có tham khảo bài login (bài Demo Form đăng nhập trong VB.NET với MSSQL Server 2005). Xin các anh chị hướng dẫn cho mình hoặc cho code và form sẵn để mình học hỏi. Xin chân thành cám ơn. Mail : thuankg@gmail.com

code của mình nhưng khi chạy báo " Bạn đã nhập sai uẻname và pasword. Xin chỉ giúp với.

***********
Imports system.data.sqlclient
----------


Public Class frmDangNhap

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim conn As New SqlConnection("server=QUANG_THUAN\SQLEXPRESS;database=quanly;uid=sa;pwd=sa;")
Dim sqladap = New SqlDataAdapter("select * from nguoidung where uid='" & Txtuser.Text & "' and pwd='" & Txtpassword.Text & "'", conn)
Dim tb As New DataTable()

Try
conn.Open()
sqladap.Fill(tb)
conn.Close()
Catch ex As Exception

End Try

If (tb.Rows.Count > 0) Then
Dim f As New frmMain()
f.Show()
Me.Hide()

Else
MessageBox.Show("B?n dã nh?p sai username và password")
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub

-------

Một số hình minh hoat
[img][url][url][/url][/url][/img]


Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 1 guest