Sui*_*Yun 2 sql-server powershell
powershell 中的以下代码将插入到 SQL Server 表中,例如
aaaaa | 呜呜呜呜
在一排,但我想要
| 乙 一个| bb 啊| bbb
在 3 个单独的行上。
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString =
"server='$Server';database='$Database';trusted_connection=true;"
$Connection.Open()
$stringA = 'a', 'aa', 'aaa'
$stirngB = 'b', 'bb', 'bbb'
for ($i = 0; $i -lt 3; $i++) {
$sql = "INSERT INTO [dbo].[Server] (ServerName, UniqueID)
VALUES ('$stringA[$i]','$stringB[$i]')"
$Command.CommandText = $sql
$Command.ExecuteReader()
}
$Connection.Close()
Run Code Online (Sandbox Code Playgroud)
如何操作我的代码以插入 3 个单独的行而不是 1 行?
PowerShell 只对字符串进行简单的变量扩展。它不会以您期望的方式扩展诸如索引或属性访问之类的复杂表达式。表达式"$stringA[$i]"被扩展为字符串表示形式,$stringA后跟一个左方括号、变量的值$i和一个右方括号。的字符串表示$stringA是由$OFS字符(输出字段分隔符,默认为空格)连接的所有数组元素,因此您首先插入a aa aaa[0],然后a aa aaa[1],然后a aa aaa[2]。
有几种方法可以将数组的各个元素放入字符串中,例如
字符串连接
"... VALUES ('" + $stringA[$i] + "','" + $stringB[$i] + "')"
Run Code Online (Sandbox Code Playgroud)子表达式
"... VALUES ('$($stringA[$i])','$($stringB[$i])')"
Run Code Online (Sandbox Code Playgroud)该格式操作
"... VALUES ('{0}','{1}')" -f $stringA[$i], $stringB[$i]
Run Code Online (Sandbox Code Playgroud)但是,在您的特定情况下,我不建议使用上述任何一种方法,因为所有这些方法都会使您的代码容易受到SQL 注入的影响。
您想要做的是使用准备好的语句。像这样的东西:
$sql = 'INSERT INTO [dbo].[Server] (ServerName, UniqueID) VALUES (@foo, @bar)'
$command.CommandText = $sql
$command.Parameters.AddWithValue('@foo', $stringA[$i])
$command.Parameters.AddWithValue('@bar', $stringB[$i])
$Command.ExecuteReader()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5219 次 |
| 最近记录: |