首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

C# 動態操作 SQL Server 完全指南:從建庫到架構變更的實戰技法

     編輯:關於SqlServer

前言

撰寫資料庫應用程式時,透過 SQL 陳述式動態建立、修改資料庫及其物件,能大幅提升開發彈性。本文示範如何運用 Visual C# 動態操作 SQL Server,涵蓋建立資料庫、資料表、預存程序、檢視、索引等物件,以及動態修改資料表結構、從各物件讀取資料並繫結至資料控制項。

核心觀念:超越 DML 的 DDL 動態執行

資料庫操作常聚焦於 SELECT、INSERT、UPDATE、DELETE 等 DML 指令,但本文重點在 DDL(資料定義語言)層面:資料庫與物件的建立、修改、刪除。掌握這些基礎技法,即能靈活開發資料庫應用程式。

開發實戰:動態資料庫管理工具

1. 介面設計

範例程式包含 10 個按鈕與 1 個 DataGrid 控制項,按鈕分三類:

  • 第一類:建立資料庫與資料庫物件
  • 第二類:查看不同物件中的資料
  • 第三類:修改資料庫物件

DataGrid 用於顯示查詢結果。

動態資料庫管理工具介面

2. 參考與資料成員設定

.NET Framework 提供兩類資料提供者:

  • SqlClient:專為 SQL Server 設計,效能最佳(命名空間:System.Data.SqlClient)
  • OleDb:通用 OLE DB 提供者(命名空間:System.Data.OleDb)

本範例針對 SQL Server,故採用 SqlClient。程式開頭引用:

using System.Data.SqlClient;

3. 關鍵程式碼片段

建立資料庫

string sql = "CREATE DATABASE MyDB ON PRIMARY "
+ "(NAME = MyDB_Data, FILENAME = 'C:\\MyDB.mdf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 10%) "
+ "LOG ON (NAME = MyDB_Log, FILENAME = 'C:\\MyDB.ldf', SIZE = 1MB, MAXSIZE = 50MB, FILEGROWTH = 10%)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();

建立資料表

string sql = "CREATE TABLE Users (ID int IDENTITY(1,1) PRIMARY KEY, "
+ "Name nvarchar(50) NOT NULL, Email nvarchar(100))";

動態修改資料表結構

// 新增欄位
"ALTER TABLE Users ADD Phone nvarchar(20)"
// 修改欄位型別
"ALTER TABLE Users ALTER COLUMN Email nvarchar(200)"
// 刪除欄位
"ALTER TABLE Users DROP COLUMN Phone"

建立預存程序

string sql = @"CREATE PROCEDURE GetUsersByEmailDomain @Domain nvarchar(50) AS
SELECT * FROM Users WHERE Email LIKE '%' + @Domain";

資料查詢與繫結

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Users", conn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGrid1.DataSource = dt;

最佳實務提醒

  • 動態 SQL 需防範 SQL Injection,參數化查詢優於字串串接
  • DDL 操作需適當權限(db_ddladmin 或 db_owner)
  • 結構變更前務必備份,生產環境建議透過遷移腳本管控
  • 大量結構變更考慮交易包裹(部分 DDL 不支援交易回滾)

結語

掌握 C# 動態執行 DDL 的技法,能建構極具彈性的資料庫應用,無論是安裝精靈、多租戶架構的結構隔離,或是自動化部署管線,都是核心關鍵能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved