Thông tin

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#

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

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

Gửi bàigửi bởi vuathongtin » T.Năm 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
Mã: Chọn tất cả
using System.Data.OleDb ; // đối với CSDL là access

hoặc :
Mã: Chọn tất cả
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
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
 SqlDataAdapter da=new SqlDataAdapter() ;
   SqlConnection con = new SqlConnection();
  DataTable dt=new DataTable() ;
Parsed in 0.006 seconds, using GeSHi 1.0.8.4


2 . Tạo Kết nối :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
void ketnoi()
        {
            if (con.State == ConnectionState.Closed)
            {
                con.ConnectionString = "<Provider của CSDL>";
                con.Open();
            }
        }
Parsed in 0.006 seconds, using GeSHi 1.0.8.4


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

ví dụ : Đối với CSDL là SQL
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
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
Parsed in 0.007 seconds, using GeSHi 1.0.8.4


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

Hoặc : đối với CSDL là access
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
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();
            }
        }
Parsed in 0.007 seconds, using GeSHi 1.0.8.4


3. Load dữ liệu vào datatable, datagridview, textbox,...
datatable :
Mã: Chọn tất cả
da.fill(dt);


datagridview:
Mã: Chọn tất cả
datagridview1.DataSource = dt;


Lấy dữ liệu từ datagridview ra ngoài :
Viết code cho các sự kiện RowHeaderMouseClick,...
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
int i = int.Parse(e.RowIndex.ToString());
this.Textbox1.Text = this.Datagridview.Rows<span style="font-style: italic">.Cells[0].Value.ToString();
Parsed in 0.012 seconds, using GeSHi 1.0.8.4

[i]Hoặc có thể dùng datatable:
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
this.Textbox1.Text = dt.Rows<span style="font-style: italic">[0].ToString();
Parsed in 0.011 seconds, using GeSHi 1.0.8.4


textbox :
Mã: Chọn tất cả
textbox1.Databindings.add(new Binding("text",datatable,"<field hiển thị>");

[i]ví dụ:
Mã: Chọn tất cả
txt_masv.DataBindings.Add(new Binding("text", dt_sinhvien, "MaSV"));


datetimepicker :
Mã: Chọn tất cả
datetimepicker .add(new Binding("value",datatable,"<field hiển thị>");

ví dụ :
Mã: Chọn tất cả
datetimepicker .add(new Binding("value",datatable,"NgaySinh");


combobox :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
cbo.DataSource = dt;
cbo.ValueMember="datamember";// giá trị Items của combobox
cbo.DisplayMember ="datamember; // tên hiển thị Items
Parsed in 0.006 seconds, using GeSHi 1.0.8.4


ví dụ :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
   cbo_lop.DataSource = dt_sinhvien;
   cbo_lop.DisplayMember = "TenLop";
   cbo_lop.ValueMember="MaLop";
Parsed in 0.006 seconds, using GeSHi 1.0.8.4


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
Mã: Chọn tất cả
this.BindingContext[dt].Position += 1;


' Previous
Mã: Chọn tất cả
this.BindingContext[dt].Position -= 1;


' Last
Mã: Chọn tất cả
Me.BindingContext[dt].Position = Me.BindingContext.Item(dt).Count - 1;


' First
Mã: Chọn tất cả
C1:  DataGridView1.CurrentCell = DataGridView1["tên hàng", 0];

Mã: Chọn tất cả
ví dụ : this.dgv_sinhvien.CurrentCell = dgv_sinhvien["MaSV", 0];


Mã: Chọn tất cả
C2:  this.BindingContext[dt_sinhvien].Position = 0;


Cách 2 : Dùng "Bindingsource"
ví dụ : Khi viết code cho button " Next"
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
 BindingSource binding=new BindingSource();
     binding.DataSource =dt ;
     DataGridView1.DataSource =binding ;
     binding.MoveNext();
Parsed in 0.006 seconds, using GeSHi 1.0.8.4


--> Ý 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
Mã: Chọn tất cả
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
Mã: Chọn tất cả
DataRow newrow=dt.NewRow();

B2 : đưa dữ liệu vào hàng mới tạo,
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
newrow["<field>"] = <dữ liệu cần thêm>;
...................................................................
dt.Rows.Add(newrow);
 
Parsed in 0.006 seconds, using GeSHi 1.0.8.4

B3 : dùng commanbuider thực thi những thay đổi trong datatable
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
 SqlCommandBuilder cb = new SqlCommandBuilder(da);
  da.Update(dt);
  cb.Dispose();
Parsed in 0.005 seconds, using GeSHi 1.0.8.4

ví dụ :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
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");
    }
Parsed in 0.009 seconds, using GeSHi 1.0.8.4


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
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
void xoa()
{
 SqlCommand cmd = new SqlCommand(<lệnh SQL xóa >, con);
  cmd.ExecuteNonQuery();
   cmd.Dispose();
}
Parsed in 0.011 seconds, using GeSHi 1.0.8.4


ví dụ :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
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");
   
}
Parsed in 0.008 seconds, using GeSHi 1.0.8.4


6.3. Sửa :
6.3.1. Phương pháp 1: Dùng câu lệnh thực thi ExecuteNonQuery
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
 string sql= "Update <tên table> set  field1= 'giá trị 1', field2= 'giá trị 2',....."
    SqlCommand cmd = new SqlCommand(sql, con);
  cmd.ExecuteNonQuery();
Parsed in 0.008 seconds, using GeSHi 1.0.8.4

ví dụ :
Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
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");
}
Parsed in 0.008 seconds, using GeSHi 1.0.8.4


p/s: Mong được sự góp ý của mọi người để bài viết hoàn thiện hơn. :)
Sửa lần cuối bởi vuathongtin vào ngày T.Tư 11/08/2010 9:52 pm với 3 lần sửa.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

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

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 15/07/2010 4:51 pm

Sao phải tách ra khi VB.NET và C# đều như nhau?
♫ ♂ + ♀ = ☺☻☺ ♫
Hình đại diện của thành viên
vo_minhdat2007
Support Staff
Support Staff
 
Bài viết: 1448
Ngày tham gia: CN 17/07/2005 1:40 am
Đến từ: Allied

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

Gửi bàigửi bởi vuathongtin » T.Năm 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 ạ.
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

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

Gửi bàigửi bởi bibio2 » T.Hai 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ó.

Syntax: [ Download ] [ Hide ]
Using csharp Syntax Highlighting
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Configuration;
using System.IO;
namespace ConfigGui
{
    public class Ketnoi
    {
        public static string SERVER;
        public static string USERNAME;
        public static string PASSWORD;
        public static string DATABASENAME;
        static Ketnoi()
        {
           
        }


        #region Properties
        private System.Data.Common.DbConnection mConnection;

        public DbConnection Connection
        {
            get { return mConnection; }
            set { mConnection = value; }

        }

        private string mConString;

        public string ConnectionString
        {
            get { return mConString; }
            set { mConString = value; }
        }

        private DbTransaction mTransaction;

        public DbTransaction Transaction
        {
            get { return mTransaction; }
            set { mTransaction = value; }
        }
       private ConnectionState mState;

        public ConnectionState State
        {
            get { return mConnection.State; }

        }
        #endregion
        #region Constructors

        public Ketnoi()
        {

            try
            {
                DbConnectionStringBuilder builder;
                mFactory = DbProviderFactories.GetFactory(Provider);

                builder = mFactory.CreateConnectionStringBuilder();

                builder.Add("User Id", Ketnoi.USERNAME);
                builder.Add("Password", Ketnoi.PASSWORD);
                builder.Add("Connection Timeout", 60);
                if (mFactory is OleDbFactory)
                {
                    builder.Add("Data Source", Ketnoi.DATABASENAME);
                    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
                }
                else
                {
                    builder.Add("Server", Ketnoi.SERVER);
                    builder.Add("Database", Ketnoi.DATABASENAME);
                }

                mConnection = mFactory.CreateConnection();
                mConnection.ConnectionString = builder.ConnectionString;
            }
            catch { }
            //}
        }
     
        public Ketnoi(string ConnectionString,string providerName)
        {
            mFactory = DbProviderFactories.GetFactory(providerName);
            mConnection = mFactory.CreateConnection();
            mConnection.ConnectionString = ConnectionString;
           
        }
        #endregion

        #region Methods
        public DbCommand CreateCommand()
        {
            DbCommand cmd = mFactory.CreateCommand();
            cmd.Connection = mConnection;
            return cmd;
        }

        public DbDataAdapter CreateAdapter()
        {
            return mFactory.CreateDataAdapter();
        }
     
        public int ExecuteNonQuery(string cmdText)
        {
            try
            {
                DbCommand cmd = CreateCommand();
                cmd.CommandText = cmdText;
                return this.ExecuteNonQuery(cmd);
            }
            catch (DbException e)
            {
               
                throw e;
            }
        }
        public int ExecuteNonQuery(DbCommand cmd)
        {
            try
            {
                this.Open();
                cmd.Transaction = mTransaction;
                cmd.ExecuteNonQuery();
                return 0;
            }
            catch (Exception e)
            {
                if (e is DbException)
                {
                        return -1100;
                }
                else
                    throw e;
                //return -1;

            }
           

        }
        /// <summary>
        /// Executes a command text and returns a DataTable
        /// </summary>
        /// <param name="cmdText">Command Text to execute</param>
        /// <returns>Result DataTable</returns>
        public DataTable ExecuteTable(string cmdText)
        {
            try
            {
                DbCommand cmd = CreateCommand();
                cmd.CommandText = cmdText;
                return this.ExecuteTable(cmd);
            }
            catch (DbException e)
            {

                throw e;
            }
           
        }

        public DataTable ExecuteTable(DbCommand cmd)
        {
            try
            {
                cmd.Transaction = mTransaction;
                this.Open();
                DbDataAdapter adp = mFactory.CreateDataAdapter();
                DataTable dt = new DataTable();
                adp.SelectCommand = cmd;
                adp.Fill(dt);
                adp.Dispose();
                return dt;
            }
            catch (DbException e)
            {

                throw e;
            }
           
        }

        /// <summary>
        /// Executes a command text and returns a DataSet
        /// </summary>
        /// <param name="cmdText">Command text to execute</param>
        /// <returns>DataSet</returns>
        public DataSet ExecuteDataSet(string cmdText)
        {
            try
            {
                DbCommand cmd = CreateCommand();
                cmd.CommandText = cmdText;
                return this.ExecuteDataSet(cmd);
            }
            catch (DbException e)
            {

                throw e;
            }
        }
        public DataSet ExecuteDataSet(DbCommand cmd)
        {
            try
            {
                this.Open();
                DbDataAdapter adp = mFactory.CreateDataAdapter();
                DataSet ds = new DataSet();
                adp.SelectCommand = cmd;
                adp.Fill(ds);
                adp.Dispose();
                return ds;
            }
            catch (DbException e)
            {

                throw e;
            }
        }
       
        /// <summary>
        /// Executes a command text and return a Scalar value
        /// </summary>
        /// <param name="cmdText">Command text to execute</param>
        /// <returns>Scalar value</returns>
        public object ExecuteScalar(string cmdText)
        {
            try
            {
                DbCommand cmd = CreateCommand();
                cmd.CommandText = cmdText;
                return this.ExecuteScalar(cmd);
            }
            catch (DbException e)
            {

                throw e;
            }
        }
        public object ExecuteScalar(DbCommand cmd)
        {
            try
            {
                this.Open();
                cmd.Transaction = mTransaction;
                return cmd.ExecuteScalar();
            }
            catch (DbException e)
            {

                throw e;
            }
           
        }

        /// <summary>
        /// Executes a command text and returns a DataReader
        /// </summary>
        /// <param name="cmdText"></param>
        /// <returns></returns>
        public DbDataReader ExecuteReader(string cmdText)
        {
            try
            {
                DbCommand cmd = CreateCommand();
               
                cmd.CommandText = cmdText;
                return this.ExecuteReader(cmd);
            }
            catch (DbException e)
            {

                throw e;
            }
        }
        public DbDataReader ExecuteReader(DbCommand cmd)
        {
            try
            {
                this.Open();
                cmd.Transaction = mTransaction;
                return cmd.ExecuteReader();
            }
            catch (DbException e)
            {

                throw e;
            }

        }
               
        public DbDataReader ExecuteReader(DbCommand cmd,CommandBehavior cobe)
        {
            try
            {
                return cmd.ExecuteReader(cobe);
            }
            catch (DbException e)
            {

                throw e;
            }
        }

   
     

        public void Open()
        {
            if (mConnection.State!= ConnectionState.Open)            
                mConnection.Open();
           
        }

        public void Close()
        {
            if ((mConnection.State == ConnectionState.Open) && mTransaction==null)
                mConnection.Close();
           
        }

       

        #endregion

    }

}
Parsed in 0.081 seconds, using GeSHi 1.0.8.4



chỉ cần dùng lớp này dể connect Data cho toàn bộ dự án của bạn.
Ghi chú của điều hành viên: vo_minhdat2007Cho code vào thẻ ngôn ngữ tương ứng
bibio2
 
Bài viết: 1
Ngày tham gia: T.Tư 19/11/2008 1:04 pm

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

Gửi bàigửi bởi vuathongtin » T.Hai 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 :) )
“chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả”
Hình đại diện của thành viên
vuathongtin
Thành viên trung thành
Thành viên trung thành
 
Bài viết: 279
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Phú Yên

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

Gửi bàigửi bởi vie87vn » T.Tư 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.
Hình đại diện của thành viên
vie87vn
Advance Member
Advance Member
 
Bài viết: 146
Ngày tham gia: T.Bảy 05/04/2008 10:15 am
Đến từ: Quán Đôi - Củ Chi


Quay về [.Net] Bài viết hướng dẫn

Đang trực tuyến

Đang xem chuyên mục này: MSN [Bot]4 khách.