簡體   English   中英

為什么從 Powershell 插入 SQL 服務器數據庫時,我的(大)字符串會被切斷?

[英]Why does my (large) string get cut off when inserting into SQL Server database from Powershell?

我正在嘗試從 Powershell 腳本將一個大字符串(49,443 個字符)插入我的 SQL 服務器數據庫,但由於某種原因,它在 43,679 個字符后被切斷。 這是我的腳本:

$SqlServer = "MyServer";
$SqlCatalog = "MyDatabase";
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "MyConnectionString"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$LargeString = gc C:\SomeTextFile.txt -Raw

$SqlQuery = "INSERT INTO MyTable (LargStringColumn) VALUES ('" + $LargeString "')"

$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)

數據庫列的類型為 varchar(max),可容納 2GB 數據。 我的研究表明,一個 powershell 字符串可以容納大約相同數量的數據。 而我實際嘗試插入的數據只是其中的一小部分(97KB)。

如果我做

Write-Host $LargeString

我可以看到所有的數據。 如果我使用 Out-File,也是如此。 運行插入命令時,我以某種方式丟失了數據。 數據確實出現在數據庫中,它不是整個字符串。

為什么我的字符串插入數據庫時總是被截斷?

回答這個問題我感到很尷尬,但事實證明我的原始代碼是正確的,我不需要參數化我的腳本(但非常感謝拉努的提示。),實際上,整個字符串插入到數據庫。 我將通過將字符串直接從 SSMS 復制並粘貼到記事本中來驗證數據。 然而,我不知道的是 SSMS 限制了返回結果的字符數。

當我將數據提取到我已經在處理的 MVC 應用程序中時,我能夠驗證一切是否正常工作。 我猜數據的簡單導出也可以!

還有,Piotr,你說的完全正確。 我最終不得不做一個 $LargString.replace 以便我所有的個人引號 ' 都將替換為雙引號 "。再次感謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM