![](/img/trans.png)
[英]Why are all of my images getting cut off when I pull the binary out of a SQL Server DB?
[英]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.