動態創建MSSQL資料庫表存儲過程

2020-11-28 站長之家
以下為引用的內容:

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1
  Inherits System.Windows.Forms.Form
  Private ConnectionString As String = "Data Source=.;Initial Catalog=;User Id=sa;Password=;"
  Private reader As SqlDataReader = Nothing
  Private conn As SqlConnection = Nothing
  Private cmd As SqlCommand = Nothing
  Private AlterTableBtn As System.Windows.Forms.Button
  Private sql As String = Nothing
  Private CreateOthersBtn As System.Windows.Forms.Button

#Region " Windows 窗體設計器生成的代碼 "
  '窗體重寫處置以清理組件列表。
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
      If Not (components Is Nothing) Then
        components.Dispose()
      End If
    End If
    MyBase.Dispose(disposing)
  End Sub
  Public Sub New()
    MyBase.New()
    InitializeComponent()
  End Sub
  Private components As System.ComponentModel.IContainer
  Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
  Friend WithEvents CreateDBBtn As System.Windows.Forms.Button
  Friend WithEvents CreateTableBtn As System.Windows.Forms.Button
  Friend WithEvents CreateSPBtn As System.Windows.Forms.Button
  Friend WithEvents CreateViewBtn As System.Windows.Forms.Button
  Friend WithEvents btnAlterTable As System.Windows.Forms.Button
  Friend WithEvents btnCreateOthers As System.Windows.Forms.Button
  Friend WithEvents btnDropTable As System.Windows.Forms.Button
  Friend WithEvents btnViewData As System.Windows.Forms.Button
  Friend WithEvents btnViewSP As System.Windows.Forms.Button
  Friend WithEvents btnViewView As System.Windows.Forms.Button
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Me.CreateDBBtn = New System.Windows.Forms.Button()
    Me.CreateTableBtn = New System.Windows.Forms.Button()
    Me.CreateSPBtn = New System.Windows.Forms.Button()
    Me.CreateViewBtn = New System.Windows.Forms.Button()
    Me.btnAlterTable = New System.Windows.Forms.Button()
    Me.btnCreateOthers = New System.Windows.Forms.Button()
    Me.btnDropTable = New System.Windows.Forms.Button()
    Me.btnViewData = New System.Windows.Forms.Button()
    Me.btnViewSP = New System.Windows.Forms.Button()
    Me.btnViewView = New System.Windows.Forms.Button()
    Me.DataGrid1 = New System.Windows.Forms.DataGrid()
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
    Me.SuspendLayout()
    '
    'CreateDBBtn
    '
    Me.CreateDBBtn.Location = New System.Drawing.Point(19, 9)
    Me.CreateDBBtn.Name = "CreateDBBtn"
    Me.CreateDBBtn.Size = New System.Drawing.Size(104, 23)
    Me.CreateDBBtn.TabIndex = 0
    Me.CreateDBBtn.Text = "創建資料庫"
    '
    'CreateTableBtn
    '
    Me.CreateTableBtn.Location = New System.Drawing.Point(139, 9)
    Me.CreateTableBtn.Name = "CreateTableBtn"
    Me.CreateTableBtn.TabIndex = 1
    Me.CreateTableBtn.Text = "創建表"
    '
    'CreateSPBtn
    '
    Me.CreateSPBtn.Location = New System.Drawing.Point(230, 9)
    Me.CreateSPBtn.Name = "CreateSPBtn"
    Me.CreateSPBtn.Size = New System.Drawing.Size(104, 23)
    Me.CreateSPBtn.TabIndex = 2
    Me.CreateSPBtn.Text = "創建存儲過程"
    '
    'CreateViewBtn
    '
    Me.CreateViewBtn.Location = New System.Drawing.Point(350, 9)
    Me.CreateViewBtn.Name = "CreateViewBtn"
    Me.CreateViewBtn.TabIndex = 3
    Me.CreateViewBtn.Text = "創建視圖"
    '
    'btnAlterTable
    '
    Me.btnAlterTable.Location = New System.Drawing.Point(441, 9)
    Me.btnAlterTable.Name = "btnAlterTable"
    Me.btnAlterTable.TabIndex = 4
    Me.btnAlterTable.Text = "修改表"
    '
    'btnCreateOthers
    '
    Me.btnCreateOthers.Location = New System.Drawing.Point(17, 43)
    Me.btnCreateOthers.Name = "btnCreateOthers"
    Me.btnCreateOthers.Size = New System.Drawing.Size(104, 23)
    Me.btnCreateOthers.TabIndex = 5
    Me.btnCreateOthers.Text = "創建規則和索引"
    '
    'btnDropTable
    '
    Me.btnDropTable.Location = New System.Drawing.Point(138, 43)
    Me.btnDropTable.Name = "btnDropTable"
    Me.btnDropTable.TabIndex = 6
    Me.btnDropTable.Text = "刪除表"
    '
    'btnViewData
    '
    Me.btnViewData.Location = New System.Drawing.Point(351, 43)
    Me.btnViewData.Name = "btnViewData"
    Me.btnViewData.TabIndex = 7
    Me.btnViewData.Text = "查看數據"
    '
    'btnViewSP
    '
    Me.btnViewSP.Location = New System.Drawing.Point(230, 43)
    Me.btnViewSP.Name = "btnViewSP"
    Me.btnViewSP.Size = New System.Drawing.Size(104, 23)
    Me.btnViewSP.TabIndex = 8
    Me.btnViewSP.Text = "查看存儲過程"
    '
    'btnViewView
    '
    Me.btnViewView.Location = New System.Drawing.Point(443, 43)
    Me.btnViewView.Name = "btnViewView"
    Me.btnViewView.TabIndex = 9
    Me.btnViewView.Text = "查看視圖"
    '
    'DataGrid1
    '
    Me.DataGrid1.DataMember = ""
    Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
    Me.DataGrid1.Location = New System.Drawing.Point(20, 76)
    Me.DataGrid1.Name = "DataGrid1"
    Me.DataGrid1.Size = New System.Drawing.Size(500, 183)
    Me.DataGrid1.TabIndex = 10
    '
    'Form1
    '
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    Me.ClientSize = New System.Drawing.Size(538, 281)
    Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.DataGrid1, Me.btnViewView, _
              Me.btnViewSP, Me.btnViewData, Me.btnDropTable, Me.btnCreateOthers, Me.btnAlterTable, _
              Me.CreateViewBtn, Me.CreateSPBtn, Me.CreateTableBtn, Me.CreateDBBtn})
    Me.Name = "Form1"
    Me.Text = "動態創建SQL Server資料庫、表、存儲過程等架構信息"
    CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
    Me.ResumeLayout(False)

  End Sub

#End Region

  ' 創建資料庫
  Private Sub CreateDBBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateDBBtn.Click
    conn = New SqlConnection(ConnectionString)
    ' 打開連接
    If conn.State <> ConnectionState.Open Then
      conn.Open()
    End If
    'MyDataBase為資料庫名稱
    Dim sql As String = "CREATE DATABASE MyDataBase ON PRIMARY (Name=MyDataBase_data, filename = " + _
        "'D:\MyDataBase.mdf', size=3," + "maxsize=5, filegrowth=10%) log on" + "(name=MyDataBase_log, " + _
        "filename='D:\MyDataBase.ldf',size=3," + "maxsize=20,filegrowth=1)"
    cmd = New SqlCommand(sql, conn)
    Try
      cmd.ExecuteNonQuery()
    Catch ae As SqlException
      MessageBox.Show(ae.Message.ToString())
    End Try
  End Sub
  '創建表
  Private Sub CreateTableBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateTableBtn.Click
    conn = New SqlConnection(ConnectionString)
    ' 打開連接
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    ConnectionString = "Data Source=.;Initial Catalog=MyDataBase;User Id=sa;Password=;"
    conn.ConnectionString = ConnectionString
    conn.Open()
    sql = "CREATE TABLE myTable" + "(myId INTEGER CONSTRAINT PKeyMyId PRIMARY KEY," + _
      "myName CHAR(50) NOT Null, myAddress CHAR(255), myValues FLOAT)"
    cmd = New SqlCommand(sql, conn)
    Try
      cmd.ExecuteNonQuery()
      ' 添加紀錄
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1001, _'【孟憲會之精彩世界】之一', 'https://xml.sz.luohuedu.net/', 100 ) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1002, '【孟憲會之精彩世界】之二', 'https://www.erp800.com/net_lover/', 99) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1003, '【孟憲會之精彩世界】之三', 'https://xml.sz.luohuedu.net/', 99) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
      sql = "INSERT INTO myTable(myId, myName, myAddress, myValues) " + _
        "VALUES (1004, '【孟憲會之精彩世界】之四', 'https://www.erp800.com/net_lover/', 100) "
      cmd = New SqlCommand(sql, conn)
      cmd.ExecuteNonQuery()
    Catch ae As SqlException
      MessageBox.Show(ae.Message.ToString())
    End Try

  End Sub
  '創建存儲過程
  Private Sub CreateSPBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateSPBtn.Click
    sql = "CREATE PROCEDURE myProc AS" + " SELECT myName, myAddress FROM myTable GO"
    ExecuteSQLStmt(sql)
  End Sub
  '創建視圖
  Private Sub CreateViewBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles CreateViewBtn.Click
    sql = "CREATE VIEW myView AS SELECT myName FROM myTable"
    ExecuteSQLStmt(sql)

  End Sub
  '修改表
  Private Sub btnAlterTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnAlterTable.Click
    sql = "ALTER TABLE MyTable ADD newCol datetime NOT NULL DEFAULT (getdate())"
    ExecuteSQLStmt(sql)
  End Sub
  '創建規則和索引
  Private Sub btnCreateOthers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnCreateOthers.Click
    sql = "CREATE UNIQUE INDEX " + "myIdx ON myTable(myName)"
    ExecuteSQLStmt(sql)

    sql = "CREATE RULE myRule " + "AS @myValues >= 90 AND @myValues < 9999"
    ExecuteSQLStmt(sql)
  End Sub

  '刪除表
  Private Sub btnDropTable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnDropTable.Click
    Dim sql As String = "DROP TABLE MyTable"
    ExecuteSQLStmt(sql)
  End Sub
  '瀏覽表數據
  Private Sub btnViewData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnViewData.Click
    conn = New SqlConnection(ConnectionString)
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    ConnectionString = "Data Source=.;Initial Catalog=MyDataBase;User Id=sa;Password=;"
    conn.ConnectionString = ConnectionString
    conn.Open()
    Dim da As New SqlDataAdapter("SELECT * FROM myTable", conn)
    Dim ds As New DataSet("myTable")
    da.Fill(ds, "myTable")
    DataGrid1.DataSource = ds.Tables("myTable").DefaultView
  End Sub
  '瀏覽存儲過程
  Private Sub btnViewSP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnViewSP.Click
    conn = New SqlConnection(ConnectionString)
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    ConnectionString = "Data Source=.;Initial Catalog=MyDataBase;User Id=sa;Password=;"
    conn.ConnectionString = ConnectionString
    conn.Open()
    Dim da As New SqlDataAdapter("myProc", conn)
    Dim ds As New DataSet("SP")
    da.Fill(ds, "SP")
    DataGrid1.DataSource = ds.DefaultViewManager
  End Sub
  '瀏覽視圖
  Private Sub btnViewView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles btnViewView.Click
    conn = New SqlConnection(ConnectionString)
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    ConnectionString = "Data Source=.;Initial Catalog=MyDataBase;User Id=sa;Password=;"
    conn.ConnectionString = ConnectionString
    conn.Open()
    Dim da As New SqlDataAdapter("SELECT * FROM myView", conn)
    Dim ds As New DataSet()
    da.Fill(ds)
    DataGrid1.DataSource = ds.DefaultViewManager
  End Sub

  Private Sub ExecuteSQLStmt(ByVal sql As String)
    conn = New SqlConnection(ConnectionString)
    ' 打開連接
    If conn.State = ConnectionState.Open Then
      conn.Close()
    End If
    ConnectionString = "Data Source=.;Initial Catalog=MyDataBase;User Id=sa;Password=;"
    conn.ConnectionString = ConnectionString
    conn.Open()
    cmd = New SqlCommand(sql, conn)
    Try
      cmd.ExecuteNonQuery()
    Catch ae As SqlException
      MessageBox.Show(ae.Message.ToString())
    End Try
  End Sub
End Class

相關焦點

  • Visual Studio Code: 利用 MSSQL 插件創建資料庫 IDE
    起初我是打算 mssql 和 vscode-database 兩個都寫的,但 mssql 的功能實在是太豐富了,它的探索過程充滿了樂趣,對它的介紹很快就佔滿了本專欄的篇幅。無論是在 Windows、macOS 還是在 Linux 上使用 mssql,都不會產生任何影響。
  • SQL server資料庫存儲過程測試方法
    待測程序(AUT:Application Under Test)或者待測系統(SUT:System Under Test)經常通過存儲過程來訪問資料庫。對於這些應用場景,可以把SQL存儲過程想像成應用程式的輔助函數。有兩種基本的方法可以用來編寫針對SQL存儲過程的輕量級的自動化測試。
  • 直擊資料庫面試題:資料庫查詢語句
    解釋存儲過程和觸發器 存儲過程是一組Transact-SQL語句,在一次編譯後可以執行多次。因為不必重新編譯Transact-SQL語句,所以執行存儲過程可以提高性能。 觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。
  • 資料庫是什麼?怎樣學習SQL Server資料庫?
    比如我們所熟悉的DHCP(動態分配ip)服務、全球資訊網(提供網站發布)服務等,本質上都是沒有界面的程序。為什麼要了解服務呢?因為資料庫就是一種服務。資料庫就是一種服務拿SQL Server資料庫來說,你下載、安裝SQL Server之後,系統服務中就會多出來好幾個和SQL Server相關的服務。
  • MySQL資料庫教程-數據表欄位約束
    MySQL資料庫教程-數據表欄位約束為保證資料庫中存儲數據的規範化,一般需要在定義欄位時進行欄位規範與約束的定義。保證在進行數據錄入時,資料庫能夠通過這個規則、約束、規範檢查所錄入的數據,防止錯誤及不符合要求數據的錄入。本文主要介紹數據表欄位約束類型及其基本語法,為下一步創建數據表提供基礎與依據。
  • 第04篇:資料庫中如何使用代碼實現建庫、建表、建約束
    前面在第一篇中,曾主要講解通過資料庫管理系統(DBMS)的圖形化界面實現建庫、建表、建約束。雖然簡單易操作,但如果不小心將資料庫、表格意外刪除,就需要重新創建;如果多次執行這樣的操作就會感覺非常繁瑣。再者當項目測試完成後,需要部署在客戶的真實電腦上。
  • VBA中動態數組的創建及利用
    今日繼續和大家分享VBA編程中常用的常用「積木」過程代碼。這些內容大多是我的經驗的記錄,來源於我多年的經驗。今日分享的是NO.244,內容是:VBA過程代碼244:VBA中動態數組的定義及創建VBA過程代碼244:VBA中動態數組的定義及創建Sub Mynz()Dim arr() As Stringerow = [c65536].End(3).Row '最後一個非空單元格行號j = 1 '數組索引號
  • Oracle的使用——創建用戶
    一、Oracle的表空間1.分類永久表空間:表空間是資料庫的邏輯劃分,一個表空間只能屬於一個資料庫。所有的資料庫對象都存 放在指定的表空間中。但主要存放的是表,所以稱作表空間。臨時表空間:Oracle 臨時表空間主要用來做查詢和存放一些緩衝區數據。
  • 資料庫設計基礎:資料庫物理設計工作過程和設計步驟
    1、數據流物理設計的工作過程在資料庫的物理結構中,數據的基本單位是數據記錄,記錄以文件的形式進行存儲,一條存儲記錄對應關係模式中的一條邏輯記錄,並且文件當中還需要記錄存儲記錄的結構信息,比如欄位長度、數據類型、欄位描述等信息。
  • 步步學LINQ to SQL:將類映射到資料庫表
    即使你選擇使用了自動生成類的工具,理解這一實現過程可以讓你更加方便地對你的應用程式加以擴展。BookAuthors表用於處理books表和authors表之間的多對多關係。為簡單起見,除了Books.Category列以外,其餘列都不允許為空。
  • 最全的資料庫分類及實例介紹
    列存儲資料庫:列式存儲(column-based)是相對於傳統關係型資料庫的行式存儲(Row-basedstorage)來說的。簡單來說兩者的區別就是對表中數據的存儲形式的差異。圖4 列存儲數據如圖4是傳統行資料庫和列資料庫表中數據在磁碟上的存儲形式的差異對比。對於行存儲資料庫,表中的數據是以行為單位逐行存儲在磁碟上的;而對於列存儲資料庫,表中的數據則是以列為單位逐列存儲在磁碟中。
  • SQL-server資料庫管理系統試卷及答案A
    C、SYS開頭的系統表中的數據用戶不能直接修改,但可以通過系統存儲過程、系統函數進行改動、添加。D、12AM是中午,12PM是午夜。4、資料庫系統不僅包括資料庫本身,還要包括相應的硬體,軟體和( )。
  • 資料庫基礎之視圖
    【本文詳細介紹了資料庫的基礎知識之視圖的基本概念和常用操作,歡迎讀者朋友們閱讀、轉發和收藏!】1 基本概念1.1 視圖的概念1. 視圖是一種資料庫對象,是從一個或者多個數據表或視圖中導出的虛表,視圖所對應的數據並不真正地存儲在視圖中,而是存儲在所引用的數據表中,視圖的結構和數據是對數據表進行查詢的結果。2.
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    GTK+沒有直接操作資料庫的控制項,對資料庫的操作可以採取通過MySQL C API 直接進行,再調用GTK+ 的顯示功能的方法來完成與用戶的交互。 2 資料庫實現 2.1 資料庫的建立 2.1.1創建work資料庫 首先創建一個名稱為work的資料庫,並包含系統需要的所有表,作為根用戶連接到MySQL。
  • 零基礎學Oracle之6:Oracle數字字典和動態視圖的理解
    1、 本部分介紹二個內容數字字典和動態視圖。這二個都是一些表,數字字典是一些相對靜態的信息,動態視圖是一些相對動態表。2、數字字典(DD)1)在執行數據定義語言(definition language,DDL)語句或有些數據操縱語言 (data manipulation language ,DML) 語句時會更新數據字典2)有幾個特點存儲在system表空間它是由sys擁有由oracle server自動維護。
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    如定義一個數組,用來存儲給定的已知數組中所有大於3的元素,很明顯,這個數組的大小是不確定的,用靜態數組的定義方式是不合適的,除非你定義的數組大小足夠大,能包括足夠多的元素,但這樣會造成內存的浪費。所以,這種場合下動態數組就派上用場了。在C語言中提供了諸如內存的申請、釋放等管理函數,然後結合指針可以按需動態地分配內存空間,來構建動態數組,達到有效利用計算機內存資源的手段。
  • SQL Server 2008:表值參數的創建和使用
    首頁 > 語言 > 關鍵詞 > SQL最新資訊 > 正文 SQL Server 2008:表值參數的創建和使用
  • 簡單學資料庫:什麼是外鍵約束,以及什麼是表關係?
    今天我們和大家分享的是什麼是外鍵約束,以及什麼是表的結構。我們廢話不多說,馬上開始我們今天的分享。開發工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(註:不需要3.7版本的也行,只需要Python3的版本都可以)1.什麼是MySQL(資料庫)?
  • 終結硬碟時代 主流內存資料庫對比報告
    TimesTen劣勢  ·不是開原始碼,需要較高費用;  ·目前不支持存儲過程和觸發器。  2.結構使得隨機讀寫的速度大大提高,另外內存優化表可以設置為非持久內存優化表,從而也就沒有了日誌(適合於ETL中間結果操作,但存在數據丟失的危險),通過內存優化表+本地編譯存儲過程有接近幾十倍的性能提升。
  • 文檔資料庫與關係資料庫的比較
    ,同時區別了文檔資料庫與過去存儲數據的文件系統的不同。而文檔資料庫具有數據的物理獨立性和邏輯獨立性,數據和程序分離。  文檔資料庫也不同於關係資料庫,關係資料庫是高度結構化的,而Notes的文檔資料庫允許創建許多不同類型的非結構化的或任意格式的欄位,與關係資料庫的主要不同在於,它不提供對參數完整性和分布事務的支持,但和關係資料庫也不是相互排斥的,它們之間可以相互交換數據,從而相互補充、擴展。