Làm Việc Với Cơ Sở Dữ Liệu SQL Server Trong C# - Openplanning

  • Tất cả tài liệu
  • Java
    • Java Basic
    • Java Collections Framework
    • Java IO
    • Java New IO
    • Java Date Time
    • Servlet/JSP
    • Eclipse Tech
      • SWT
      • RCP
      • RAP
      • Eclipse Plugin Tools
    • XML & HTML
    • Java Opensource
    • Java Application Servers
  • Maven
  • Gradle
  • Servlet/Jsp
  • Thymeleaf
  • Spring
    • Spring Boot
    • Spring Cloud
  • Struts2
  • Hibernate
  • Java Web Service
  • JavaFX
  • SWT
  • Oracle ADF
  • Android
  • iOS
  • Python
  • Swift
  • C#
  • C/C++
  • Ruby
  • Dart
  • Batch
  • Database
    • Oracle
    • MySQL
    • SQL Server
    • PostGres
    • Other Database
  • Oracle APEX
  • Report
  • Client
  • ECMAScript / Javascript
  • TypeScript
  • NodeJS
  • ReactJS
  • Flutter
  • AngularJS
  • HTML
  • CSS
  • Bootstrap
  • OS
    • Ubuntu
    • Solaris
    • Mac OS
  • VPS
  • Git
  • SAP
  • Amazon AWS
  • Khác
    • Chưa phân loại
    • Phần mềm & ứng dụng tiện ích
    • VirtualBox
    • VmWare
Làm việc với cơ sở dữ liệu SQL Server trong C#
  1. Giới thiệu
  2. Kết nối C# vào SQL Server Database
  3. SqlCommand
  4. Truy vấn dữ liệu
  5. Insert dữ liệu
  6. Update dữ liệu
  7. Xóa dữ liệu
  8. Gọi thủ tục trong C#
  9. Gọi hàm trong C#
  10. ExecuteScalar

1. Giới thiệu

Trong tài liệu này tôi sẽ hướng dẫn bạn thao tác với cơ sở dữ liệu SQL Server sử dụng C#, mục tiêu bao gồm:
  • Query
  • Insert
  • Update
  • Delete
  • Gọi hàm, thủ tục từ C#,...
Tài liệu này sử dụng SIMPLEHR, một Database Schema ví dụ được sử dụng trong nhiều hướng dẫn trên o7planning.org, bạn có thể tạo Schema này trên Oracle, MySQL hoặc SQL Server. Bạn có thể xem hướng dẫn tại:
  • Cơ sở dữ liệu mẫu

2. Kết nối C# vào SQL Server Database

Tạo project CsSQLServerTutorial:Project đã được tạo ra.Bạn cần một class tiện ích (DBUtils.cs) giúp kết nối vào cơ sở dữ liệu. Với cơ sở dữ liệu SQL Server, bạn có thể xem hướng dẫn tại:
  • Kết nối cơ sở dữ liệu SQL Server trong C#
DBSQLServerUtils.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace Tutorial.SqlConn { class DBSQLServerUtils { public static SqlConnection GetDBConnection(string datasource, string database, string username, string password) { // // Data Source=TRAN-VMWARE\SQLEXPRESS;Initial Catalog=simplehr;Persist Security Info=True;User ID=sa;Password=12345 // string connString = @"Data Source="+datasource+";Initial Catalog=" +database+";Persist Security Info=True;User ID="+username+";Password="+password; SqlConnection conn = new SqlConnection(connString); return conn; } } }DBUtils.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; namespace Tutorial.SqlConn { class DBUtils { public static SqlConnection GetDBConnection() { string datasource = @"192.168.205.135\SQLEXPRESS"; string database = "simplehr"; string username = "sa"; string password = "1234"; return DBSQLServerUtils.GetDBConnection(datasource, database, username, password); } } }

3. SqlCommand

Trong C# để thao tác với cơ sở dữ liệu SQL Server, chẳng hạn query, insert, update, delete bạn sử dụng một đối tượng SqlCommand, SqlCommand là một class mở rộng từ DbCommand. Trong trường hợp bạn cần query, insert,update hoặc delete trong Oracle Database bạn cần sử dụng OracleCommand, hoặc với MySQLMySQLCommand. Thật đáng tiếc là bạn sẽ rất khó khăn nếu muốn sử dụng một mã nguồn cho các loại cơ sở dữ liệu khác nhau.Tạo đối tượng SqlCommand để thao tác với SQL Server Database:SqlConnection conn = DBUtils.GetDBConnection(); // Cách 1: ----------- // Tạo một đối tượng Command từ đối tượng Connection. SqlCommand cmd = conn.CreateCommand(); // Set Command Text cmd.CommandText = sql; // Cách 2: ----------- // Tạo đối tượng Command. SqlCommand cmd = new SqlCommand(sql); // Liên hợp Connection với Command. cmd.Connection = conn; // Cách 3: ------------ // Tạo một đối tượng Command với 2 tham số: Command Text & Connection. SqlCommand cmd = new SqlCommand(sql, conn);

4. Truy vấn dữ liệu

Ví dụ truy vấn dữ liệu sử dụng C#.QueryDataExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data.SqlClient; using System.Data.Common; namespace CsSQLServerTutorial { class QueryDataExample { static void Main(string[] args) { // Lấy ra đối tượng Connection kết nối vào DB. SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { QueryEmployee(conn); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { // Đóng kết nối. conn.Close(); // Hủy đối tượng, giải phóng tài nguyên. conn.Dispose(); } Console.Read(); } private static void QueryEmployee(SqlConnection conn ) { string sql = "Select Emp_Id, Emp_No, Emp_Name, Mng_Id from Employee"; // Tạo một đối tượng Command. SqlCommand cmd = new SqlCommand(); // Liên hợp Command với Connection. cmd.Connection = conn; cmd.CommandText = sql; using (DbDataReader reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { // Chỉ số của cột Emp_ID trong câu lệnh SQL. int empIdIndex = reader.GetOrdinal("Emp_Id"); // 0 long empId = Convert.ToInt64(reader.GetValue(0)); // Cột Emp_No có index = 1. string empNo = reader.GetString(1); int empNameIndex = reader.GetOrdinal("Emp_Name");// 2 string empName = reader.GetString(empNameIndex); // Chỉ số của cột Mng_Id trong câu lệnh SQL. int mngIdIndex = reader.GetOrdinal("Mng_Id"); long? mngId = null; if (!reader.IsDBNull(mngIdIndex)) { mngId = Convert.ToInt64(reader.GetValue(mngIdIndex)); } Console.WriteLine("--------------------"); Console.WriteLine("empIdIndex:" + empIdIndex); Console.WriteLine("EmpId:" + empId); Console.WriteLine("EmpNo:" + empNo); Console.WriteLine("EmpName:" + empName); Console.WriteLine("MngId:" + mngId); } } } } } }Chạy ví dụ:-------------------- empIdIndex:0 EmpId:7369 EmpNo:E7369 EmpName:SMITH MngId:7902 -------------------- empIdIndex:0 EmpId:7499 EmpNo:E7499 EmpName:ALLEN MngId:7698 -------------------- empIdIndex:0 EmpId:7521 EmpNo:E7521 EmpName:WARD MngId:7698 -------------------- empIdIndex:0 EmpId:7566 EmpNo:E7566 EmpName:JONES MngId:7839 .....
Chú ý: Câu lệnh using sử dụng để đảm bảo rằng đối tượng sẽ bị tiêu hủy (dispose) ngay sau khi nó ra khỏi phạm vi, mà không cần phải đòi hỏi phải viết code một cách trực quan.// Sử dụng từ khóa 'using' với các đối tượng kiểu IDispose. // (Là đối tượng của Interface IDispose). using (DbDataReader reader = cmd.ExecuteReader()) { // ... } // Tương đương với: DbDataReader reader = cmd.ExecuteReader(); try { // ... } finally { // Gọi phương thức để tiêu hủy đối tượng // Giải phóng tài nguyên. reader.Dispose(); }

5. Insert dữ liệu

Ví dụ sau insert thêm một bản ghi vào bảng Salary_Grade.InsertDataExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data.Common; using System.Data; using System.Data.SqlClient; namespace CsSQLServerTutorial { class InsertDataExample { static void Main(string[] args) { SqlConnection connection = DBUtils.GetDBConnection(); connection.Open(); try { // Câu lệnh Insert. string sql = "Insert into Salary_Grade (Grade, High_Salary, Low_Salary) " + " values (@grade, @highSalary, @lowSalary) "; SqlCommand cmd = connection.CreateCommand(); cmd.CommandText = sql; // Tạo một đối tượng Parameter. SqlParameter gradeParam = new SqlParameter("@grade",SqlDbType.Int); gradeParam.Value = 3; cmd.Parameters.Add(gradeParam); // Thêm tham số @highSalary (Viết ngắn hơn). SqlParameter highSalaryParam = cmd.Parameters.Add("@highSalary", SqlDbType.Float); highSalaryParam.Value = 20000; // Thêm tham số @lowSalary (Viết ngắn hơn nữa). cmd.Parameters.Add("@lowSalary", SqlDbType.Float ).Value = 10000; // Thực thi Command (Dùng cho delete, insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { connection.Close(); connection.Dispose(); connection = null; } Console.Read(); } } }Chạy ví dụ:Row Count affected = 1

6. Update dữ liệu

Ví dụ update trong C#.UpdateExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using Tutorial.SqlConn; using System.Data; namespace CsSQLServerTutorial { class UpdateExample { static void Main(string[] args) { SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { string sql = "Update Employee set Salary = @salary where Emp_Id = @empId"; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = sql; // Thêm và sét đặt giá trị cho tham số. cmd.Parameters.Add("@salary", SqlDbType.Float).Value = 850; cmd.Parameters.Add("@empId", SqlDbType.Decimal).Value = 7369; // Thực thi Command (Dùng cho delete, insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); conn = null; } Console.Read(); } } }Chạy ví dụ:Row Count affected = 1

7. Xóa dữ liệu

Ví dụ sử dụng C# xóa dữ liệu trong SQL.DeleteExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using Tutorial.SqlConn; using System.Data; namespace CsSQLServerTutorial { class DeleteExample { static void Main(string[] args) { SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { string sql = "Delete from Salary_Grade where Grade = @grade "; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = sql; cmd.Parameters.Add("@grade", SqlDbType.Int).Value = 3; // Thực thi Command (Dùng cho delete, insert, update). int rowCount = cmd.ExecuteNonQuery(); Console.WriteLine("Row Count affected = " + rowCount); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); conn = null; } Console.Read(); } } }

8. Gọi thủ tục trong C#

Bạn cần tạo ra một thủ tục đơn giản trong SQL Server và gọi nó trong C#:Get_Employee_Info-- Thủ tục lấy ra thông tin của một nhân viên, -- Truyền vào tham số p_Emp_ID (Integer) -- Có 4 tham số đầu ra v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date CREATE PROCEDURE Get_Employee_Info @p_Emp_Id Integer , @v_Emp_No Varchar(50) OUTPUT, @v_First_Name Varchar(50) OUTPUT, @v_Last_Name Varchar(50) OUTPUT, @v_Hire_Date Date OUTPUT AS BEGIN set @v_Emp_No = 'E' + CAST( @p_Emp_Id as varchar) ; -- set @v_First_Name = 'Michael'; set @v_Last_Name = 'Smith'; set @v_Hire_date = getdate(); ENDCallProcedureExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data; using System.Data.SqlClient; namespace CsSQLServerTutorial { class CallProcedureExample { // Get_Employee_Info // @p_Emp_Id Integer , // @v_Emp_No Varchar(50) OUTPUT // @v_First_Name Varchar(50) OUTPUT // @v_Last_Name Varchar(50) OUTPUT // @v_Hire_Date Date OUTPUT static void Main(string[] args) { SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { // Tạo một đối tượng Command để gọi thủ tục Get_Employee_Info. SqlCommand cmd = new SqlCommand("Get_Employee_Info", conn); // Kiểu của Command là StoredProcedure cmd.CommandType = CommandType.StoredProcedure; // Thêm tham số @p_Emp_Id và gán giá trị 100 cho nó. cmd.Parameters.Add("@p_Emp_Id", SqlDbType.Int).Value =100; // Thêm tham số @v_Emp_No kiểu Varchar(20). cmd.Parameters.Add(new SqlParameter("@v_Emp_No", SqlDbType.VarChar, 20)); cmd.Parameters.Add(new SqlParameter("@v_First_Name", SqlDbType.VarChar, 50)); cmd.Parameters.Add(new SqlParameter("@v_Last_Name", SqlDbType.VarChar, 50)); cmd.Parameters.Add(new SqlParameter("@v_Hire_Date", SqlDbType.Date)); // Đăng ký tham số @v_Emp_No là OUTPUT. cmd.Parameters["@v_Emp_No"].Direction = ParameterDirection.Output; cmd.Parameters["@v_First_Name"].Direction = ParameterDirection.Output; cmd.Parameters["@v_Last_Name"].Direction = ParameterDirection.Output; cmd.Parameters["@v_Hire_Date"].Direction = ParameterDirection.Output; // Thực thi thủ tục. cmd.ExecuteNonQuery(); // Lấy các giá trị đầu ra. string empNo = cmd.Parameters["@v_Emp_No"].Value.ToString(); string firstName = cmd.Parameters["@v_First_Name"].Value.ToString(); string lastName = cmd.Parameters["@v_Last_Name"].Value.ToString(); DateTime hireDate = (DateTime)cmd.Parameters["@v_Hire_Date"].Value; Console.WriteLine("Emp No: " + empNo); Console.WriteLine("First Name: " + firstName); Console.WriteLine("Last Name: " + lastName); Console.WriteLine("Hire Date: " + hireDate); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }Chạy ví dụ:Emp No: E100 First Name: Michael Last Name: Smith Hire Date: 2/11/2016 12:00:00 AM

9. Gọi hàm trong C#

Bạn cần một hàm đơn giản và gọi nó trong C#.Get_Emp_No-- Thủ tục lấy ra thông tin của một nhân viên, -- Truyền vào tham số p_Emp_ID (Integer) -- Trả về Emp_No CREATE Function Get_Emp_No (@p_Emp_Id Integer) Returns Varchar(50) AS BEGIN return 'E'+ CAST( @p_Emp_Id as varchar); ENDCallFunctionExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tutorial.SqlConn; using System.Data; using System.Data.SqlClient; namespace CsSQLServerTutorial { class CallFunctionExample { // Function: Get_Emp_No // Parameter: @p_Emp_Id Integer static void Main(string[] args) { SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { // Tạo một đối tượng Command để gọi hàm Get_Emp_No. SqlCommand cmd = new SqlCommand("Get_Emp_No", conn); // Kiểu của Command là StoredProcedure cmd.CommandType = CommandType.StoredProcedure; // Thêm tham số @p_Emp_Id và gán giá trị 100 cho nó. cmd.Parameters.Add("@p_Emp_Id", SqlDbType.Int).Value = 100; // Tạo một đối tượng Parameter, lưu trữ giá trị trả về của hàm. SqlParameter resultParam = new SqlParameter("@Result", SqlDbType.VarChar); // resultParam.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(resultParam); // Gọi hàm. cmd.ExecuteNonQuery(); string empNo = null; if (resultParam.Value != DBNull.Value) { empNo = (string)resultParam.Value; } Console.WriteLine("Emp No: " + empNo); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }Chạy ví dụ:Emp No: E100

10. ExecuteScalar

SqlCommand.ExecuteScalar() là một phương thức sử dụng để thực thi câu lệnh SQL, nó trả về giá trị của cột đầu tiên của dòng đầu tiên trong câu SQL.-- Câu lệnh sau trả về duy nhất một giá trị. Select count(*) from Employee; -- Hoặc Select Max(e.Salary) From Employee e;Ví dụ:ExecuteScalarExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; using Tutorial.SqlConn; namespace CsSQLServerTutorial { class ExecuteScalarExample { static void Main(string[] args) { SqlConnection conn = DBUtils.GetDBConnection(); conn.Open(); try { SqlCommand cmd = new SqlCommand("Select count(*) From Employee", conn); cmd.CommandType = CommandType.Text; // Phương thức ExecuteScalar trả về giá trị của cột đầu tiên, trên dòng đầu tiên. int count = (int) cmd.ExecuteScalar(); Console.WriteLine("Emp Count: " + count); } catch (Exception e) { Console.WriteLine("Error: " + e); Console.WriteLine(e.StackTrace); } finally { conn.Close(); conn.Dispose(); } Console.Read(); } } }Chạy ví dụ:Emp Count: 14

Các hướng dẫn lập trình C#

  • Thừa kế và đa hình trong C#
  • Bắt đầu với C# cần những gì?
  • Học nhanh C# cho người mới bắt đầu
  • Cài đặt Visual Studio 2013 trên Windows
  • Abstract class và Interface trong C#
  • Cài đặt Visual Studio 2015 trên Windows
  • Nén và giải nén trong C#
  • Hướng dẫn lập trình đa luồng trong C#
  • Hướng dẫn và ví dụ C# Delegate và Event
  • Cài đặt AnkhSVN trên Windows
  • Lập trình C# theo nhóm sử dụng Visual Studio và SVN
  • Cài đặt .Net Framework
  • Access Modifier trong C#
  • Hướng dẫn và ví dụ C# String và StringBuilder
  • Hướng dẫn và ví dụ C# Property
  • Hướng dẫn và ví dụ C# Enum
  • Hướng dẫn và ví dụ C# Structure
  • Hướng dẫn và ví dụ C# Generics
  • Hướng dẫn xử lý ngoại lệ trong C#
  • Hướng dẫn và ví dụ Date Time trong C#
  • Thao tác với tập tin và thư mục trong C#
  • Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
  • Hướng dẫn sử dụng biểu thức chính quy trong C#
  • Kết nối cơ sở dữ liệu SQL Server trong C#
  • Làm việc với cơ sở dữ liệu SQL Server trong C#
  • Kết nối cơ sở dữ liệu MySQL trong C#
  • Làm việc với cơ sở dữ liệu MySQL trong C#
  • Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
  • Làm việc với cơ sở dữ liệu Oracle trong C#
Show More

Các hướng dẫn lập trình C#

  • Thừa kế và đa hình trong C#
  • Bắt đầu với C# cần những gì?
  • Học nhanh C# cho người mới bắt đầu
  • Cài đặt Visual Studio 2013 trên Windows
  • Abstract class và Interface trong C#
  • Cài đặt Visual Studio 2015 trên Windows
  • Nén và giải nén trong C#
  • Hướng dẫn lập trình đa luồng trong C#
  • Hướng dẫn và ví dụ C# Delegate và Event
  • Cài đặt AnkhSVN trên Windows
  • Lập trình C# theo nhóm sử dụng Visual Studio và SVN
  • Cài đặt .Net Framework
  • Access Modifier trong C#
  • Hướng dẫn và ví dụ C# String và StringBuilder
  • Hướng dẫn và ví dụ C# Property
  • Hướng dẫn và ví dụ C# Enum
  • Hướng dẫn và ví dụ C# Structure
  • Hướng dẫn và ví dụ C# Generics
  • Hướng dẫn xử lý ngoại lệ trong C#
  • Hướng dẫn và ví dụ Date Time trong C#
  • Thao tác với tập tin và thư mục trong C#
  • Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
  • Hướng dẫn sử dụng biểu thức chính quy trong C#
  • Kết nối cơ sở dữ liệu SQL Server trong C#
  • Làm việc với cơ sở dữ liệu SQL Server trong C#
  • Kết nối cơ sở dữ liệu MySQL trong C#
  • Làm việc với cơ sở dữ liệu MySQL trong C#
  • Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
  • Làm việc với cơ sở dữ liệu Oracle trong C#
Show More

Các bài viết mới nhất

  • Xử lý lỗi 404 trong Flutter GetX
  • Ví dụ đăng nhập và đăng xuất với Flutter Getx
  • Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
  • Hướng dẫn và ví dụ Flutter multi_dropdown
  • Hướng dẫn và ví dụ Flutter flutter_form_builder
  • Hướng dẫn và ví dụ Flutter GetX obs Obx
  • Hướng dẫn và ví dụ Flutter GetX GetBuilder
  • Từ khoá part và part of trong Dart
  • Hướng dẫn và ví dụ Flutter InkWell
  • Bài thực hành Flutter SharedPreferences
  • Hướng dẫn và ví dụ Flutter Radio
  • Hướng dẫn và ví dụ Flutter Slider
  • Hướng dẫn và ví dụ Flutter SkeletonLoader
  • Chỉ định cổng cố định cho Flutter Web trên Android Studio
  • Hướng dẫn và ví dụ Flutter SharedPreferences
  • Tạo Module trong Flutter
  • Flutter upload ảnh sử dụng http và ImagePicker
  • Bài thực hành Dart http CRUD
  • Hướng dẫn và ví dụ Flutter image_picker
  • Flutter GridView với SliverGridDelegate tuỳ biến
Show More
  • Các hướng dẫn lập trình C#

Từ khóa » Truyền Tham Số Sql Trong C#