我需要使用文本文件更新表格。目前,如果我从 txt 文件执行Get-Content
然后运行 SQL 更新查询,我的代码工作正常,但仅限于小数据的情况下。如果文本大小太长或包含一些特殊字符,则会引发如下错误:
使用"0"参数调用"ExecuteReader"的异常:"语法不正确,接近')以下是我正在使用的代码:
Function DatabaseQueries(){ #To connect to the SQL database $Connection = New-Object System.Data.SQLClient.SQLConnection $Connection.ConnectionString = "Server=$IPSource ; Database=$DBNameSource ; User ID=$UserIDSource ; Password=$LoginPwdSource;" $Connection.Open() #Query to get the ID of the stored script field from propertyentry $Command1 = New-Object System.Data.SQLClient.SQLCommand $Command1.Connection = $Connection $Command1.CommandText = "SELECT [ID] FROM [dbo].[propertyentry] WHERE [PROPERTY_KEY]='com.onresolve.jira.groovy.groovyrunner:customfields' " $Reader = $Command1.ExecuteReader() while ($Reader.Read()) { $ID = $Reader.GetValue($1) } #To get the updated script file $ScriptDir = $ParentDir + 'Script.txt' $ScriptData = Get-Content "$ScriptDir" $Connection.Close() #Query to update the Script in JIRA database $Connection.Open() $Command = New-Object System.Data.SQLClient.SQLCommand $Command.Connection = $Connection $Command.CommandText = @" Update [dbo].[propertytext] set [propertyvalue] ='$ScriptData' Where ID=$ID "@ $Reader = $Command.ExecuteReader() $Connection.Close() }
如果未指定文件内容和数据库结构,则很难编写完整的解决方案。您肯定遇到了某种SQL注入。SQL 查询串联被认为是有害的,您应该避免它。使用 ADO.NET 参数传递变量(在您的示例中
$Command.Parameters.AddWithValue
)。请参阅以下示例:function Invoke-Sql( $ConnectionString, $Query, $Parameters ) { $conn = New-Object System.Data.SqlClient.SqlConnection -ArgumentList $ConnectionString $cmd = New-Object System.Data.SqlClient.SqlCommand -ArgumentList $Query,$conn $conn.Open() foreach ($arg in $Parameters.GetEnumerator()){ $cmd.Parameters.AddWithValue($arg.Key, $arg.Value) | Out-Null; } $reader = $cmd.ExecuteReader() if ($reader.Read()) { [string[]]$columns = 0..($reader.FieldCount-1) | % { if ($reader.GetName($_)) { $reader.GetName($_) } else { "(no name $_)" } } do { $obj = @{} 0..($reader.FieldCount-1) | % { $obj.Add($columns[$_], $reader[$_]) } New-Object PSObject -Property $obj } while ($reader.Read()) } $reader.Dispose() $cmd.Dispose() $conn.Dispose() } Invoke-Sql ` -ConnectionString "Server=.SQL2014;Database=Test1;Integrated Security=true" ` -Query 'SELECT Name, Id [ObjectId], Id + 3, @arg FROM IdNameTest' ` -Parameters @{arg = 'Some text'''} Invoke-Sql ` -ConnectionString "Server=.SQL2014;Database=Test1;Integrated Security=true" ` -Query 'UPDATE IdNameTest SET Name=@name WHERE Id=@id' ` -Parameters @{name = "'DROP DATABASE Death;! %&@!$"; id=1}
感谢您的回复,我已经找到了一种仅使用替换函数来执行查询的方法,因为它在单个倒逗号之间混淆了
select REPLACE(Cast(propertyvalue AS varchar(Max)), '''', '''''') FROM [dbo].[propertytext] WHERE ID=$ID
相关内容
- 没有找到相关文章
最新更新
- 是否有一个库来创建时间间隔来检查是否给定时间在python中命中它们
- Regex-空格无法获得整数值
- 模式改变时数据插入到增量表中
- kubectl获取带有活动运行pod计数的服务
- rxjs firstValueFrom never resolve
- 使用Office脚本从URL向特定单元格添加图像
- 动态添加数据到更多的TextView
- moment.js和2021年10月的奇怪结果
- 如何在真正的无头模式下拦截使用puppeteer的所有页面请求?
- 从javascript中的for循环结果创建一个关联数组
- 列出卡片未在条带中检索
- 如果-否则不能在Tkinter下工作,请解决这个问题:
- 将2个按钮组合为1
- 如何重塑一个特定的数据集从长到宽没有J变量Stata?
- 如何使用 Linux Comand "convert -draw"更改添加到图像上的文本的大小
- 如何处理好友请求在数据库中的接受逻辑?
- 从Formik字段提取值并执行自定义onChange函数
- Spring Boot JPA - SQL本地查询双撇号错误
- jax的矢量化指南
- Apache ActiveMQ Artemis HA集群部署在Kubernetes中,Istio代理注入到Artemis
- Get DNS脚本在报告中缺少输出
- Spring Boot Bucket4j在超过速率限制时自定义http响应体
- 查找SSIS .dtsx包中的表名
- 从情节中删除传说(R情节闪亮)
- 当我关闭会话或退出计算机时,计划任务是保持在后台运行Powershell脚本的唯一方法吗?
- 使用node-postgres创建一个依赖于先前查询结果的查询
- 发布在r的散点图中添加第二个变量
- 汇编函数地址表和函数下或数据段中的数据
- 如何解析常规(不是换行分隔)json与Apache Beam和杰克逊?
- 检索策略.netprofit,策略.由于在循环/迭代(FOR)中更改参数而关闭的交易
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium