PowerShell 連接SQLServer資料庫執行DML,DDL,DCL操作

来源:http://www.cnblogs.com/wy123/archive/2017/02/21/6426261.html
-Advertisement-
Play Games

本位出處:http://www.cnblogs.com/wy123/p/6426261.html 正如ADO.NET連接至數據執行增刪查改操作一樣,PowerShell 也可以連接SQLServer資料庫,執行性增刪查改功能,除此之外,PowerShell還可以執行DDL和DCL操作,另外就是支持D ...


 本位出處:http://www.cnblogs.com/wy123/p/6426261.html 

 

正如ADO.NET連接至數據執行增刪查改操作一樣,PowerShell 也可以連接SQLServer資料庫,執行性增刪查改功能,除此之外,PowerShell還可以執行DDL和DCL操作,另外就是支持DDL+DML+DCL的事務性操作,也就說PowerShell執行T-SQL的時候,可以將DDL+DML+DCL作為一個事物處理

 

PowerShell執行DML操作

新增操作

執行完之後來資料庫中確認

 

修改

 

刪除

 

   

      查詢操作,首先在資料庫中插入兩條記錄

在PowerShell中遍歷讀取表中的記錄,讀取數據的時候,不支持GO,加上GO提交符會報錯? 不太熟悉PowerShell,熟悉的朋友可以指點一下,謝謝。

 

PowerShell執行DDL和DML操作

 與ADO.NET不同的是PowerShell可以執行DDL和DCL操作,這裡以創建一個表並且授權給Test用戶為示例

cls
$serverInstance="localhost\sqlserver2014A" #SQL Server實例名

$strSql = "
            USE TestDB
            GO
            CREATE TABLE TestDMLByPS
            (
                Id int,
                Name varchar(100)
            )
            GO
            
            GRANT SELECT ON TestDMLByPS TO Test
            GO
           "

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null  #載入程式集Microsoft.SqlServer.ConnectionInfo
$ServerConnection =new-object Microsoft.SqlServer.Management.Common.ServerConnection $serverInstance
try
{
    $ServerConnection.Connect()
    $ServerConnection.ExecuteNonQuery($strSql) 
}
Catch
{
    throw
}

  創建了TestDMLByPS表

  

  同時執行的DCL語句也生效了

  

PowerShell事務性操作

  將一個DML操作和一個DDL操作放在一個事物中執行,如果DDL創建的表不存在,則兩個SQL可以成功執行

  

  將一個DML操作和一個DDL操作放在一個事物中執行,如果DDL創建的已經存在,那麼DDL執行失敗,那麼DML執行的刪除操作也失敗,這一次刪除操作換一個存在的Id,提示異常,事物回滾

   

  可以發現,DML執行的刪除也一併回滾,並沒有刪除掉Id=2的記錄

  

  與ADO.NET不同的是,PowerShell執行的事物可以包括DML和DDL或者DCL等操作

 

  最後附上操作腳本 

cls
$serverInstance="localhost\sqlserver2014A" #SQL Server實例名

$strSql1 = "USE TestDB
           GO
           CREATE TABLE T1(ID INT,VAL VARCHAR(50))
           GO"
$strSql2 = "USE TestDB
           GO
           INSERT INTO T2 VALUES (1,'TestPowerShell')
           GO"
$strSql3 = "USE TestDB
           GO
           UPDATE T2 SET Name = 'Test Update by PowerShell' WHERE ID = 1
           GO"
$strSql4 = "USE TestDB
           
           SELECT * FROM T2
           "

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null  #載入程式集Microsoft.SqlServer.ConnectionInfo
$ServerConnection =new-object Microsoft.SqlServer.Management.Common.ServerConnection $serverInstance

try
{
    $ServerConnection.Connect()
    #打開事務
    $ServerConnection.BeginTransaction()
    
    #執行DDL語句
    $ServerConnection.ExecuteNonQuery($strSql1)
    #執行DML語句
    $ServerConnection.ExecuteNonQuery($strSql2)
    #執行DML語句
    $ServerConnection.ExecuteNonQuery($strSql3)
    #執行DML語句,遍歷查詢結果

    $sqlReader = $ServerConnection.ExecuteReader($strSql4)
    $Datatable = New-Object System.Data.DataTable
    $DataTable.Load($SqlReader)
    for ($i=0;$i -le $DataTable.Rows.Count;$i++)
    {
        Write-Host 'value is : ' + $i + ' ' + $DataTable.Rows[$i][0]
        Write-Host 'value is : ' + $i + ' ' + $DataTable.Rows[$i][1]
    }
    
    #提交事務
    $ServerConnection.CommitTransaction()
}
Catch
{
    if ($ServerConnection.TransactionDepth -gt 0)
    {
        $ServerConnection.RollbackTransaction()
    }
    throw
}

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預設網卡名稱是 eno16777736 1、修改配置文件 ifcfg-eno16777736 將 NAME 和 DEVICE 修改為 eth0 重命名該文件 2、禁用該可預測命名規則 在 grup 文件裡面的 GRUB_CMDLINE_LINUX 變數添加 net.ifnames=0 biosdev ...
  • linux下列出所有連接到你的Server的IP地址 最近要做一個檢查所有連接到主機的IP的腳本,google到一篇老外寫的文章 "《List all IP addresses connected to your Server》" 試了一下腳本結果好像可以。因為對linux瞭解很少,所以對這 行 腳 ...
  • 序言 當前的形勢,.Net已經開源,.Net Core 正在跨平臺,可見微軟巨人在努力,在改變,在進步,在走向春天。從前被微軟供作上帝的.Net從業者,如果不打開心扉面向開源,改變自己,那麼很可能在不久的將來,恐英雄無用武之地,可悲可嘆,嗚呼哀哉! 如今Linux已經是開發者必備技能之一,我們想要了 ...
  • MacOS:10.12.3 VMware:專業版 8.5.3 CentOS:CentOS-6.5-x86_64-bin-DVD版本 安裝完畢後,配置上網: 第一步: "編輯虛擬機的硬體設置"中打開”網路適配器“修改為下圖配置 註:修改配置完成後需要重啟虛擬機。 第二步: 配置centos為靜態IP: ...
  • 某伺服器只部署了個IIS,應用目錄都在D盤,可C盤97.5GB空間卻被占滿了。 將系統文件,隱藏文件全部顯示,再選中所有的C盤文件及文件夾查看容量只有19GB。 既然只部署了IIS,那自然就懷疑到了IIS日誌上去了。果然IIS日誌是在C盤下麵的。 可從外邊看,inetpub目錄卻只有3MB大小。 下 ...
  • MODBUS讀取多個寄存器(功能碼04) 為了簡單我這裡只用4個寄存器,當讓你也可以用125個寄存器,但是最多也只能用125個寄存器的。每個寄存器有上面的表知道為一個字的大小即2個位元組或者叫16比特位。 1、根據流程主機我們發送:01 04 00 00 00 04 F1 C9 2、響應數據隨意數據例 ...
  • 第十四節 用戶管理初級(下) 標簽(空格分隔): Linux實戰教學筆記 陳思齊 [更多資料點我查看][1] 1,用戶查詢相關命令id,finger,users,w,who,last,lastlog,groups 本節主要介紹在用戶管理中,查詢用戶的幾種常見工具id,finger,w,who,las ...
  • 主要過程為:準備 ubuntu 伺服器 -> 安裝 MySQL -> 安裝 apache -> 安裝 PHP (php 安裝要在 mysql 和 apache 之後的原因是因為 php 要依賴 apache 和 mysql 服務的) 首先有必要更新一下軟體包資源 sudo apt-get updat ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...