【问题标题】:Data from Powershell forms with blank fields into SQL Server database将带有空白字段的 Powershell 表单中的数据导入 SQL Server 数据库
【发布时间】:2014-07-18 12:31:26
【问题描述】:

到目前为止,我已经在 Powershell Studio 中创建了一个表单,我想从该表单中获取用户的输入并将其放入 SQL Server 数据库中。

在大多数情况下,这可以正常工作,除非表单中的文本字段留空,否则会发生错误。即使某些字段不完整,我也需要能够插入数据,因为人们能够返回并编辑并添加到该数据,然后在数据库中更新它。

如果我将文本框留空,则会出现以下错误:

错误:使用“1”参数调用“Fill”的异常:“',' 附近的语法不正确。” testTabForm.psf (59): 错误: At Line: 59 char: 3
错误:+ $SqlAdapter.Fill($DataSet)
错误:+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
错误:+ CategoryInfo:未指定:(:) [],MethodInvocationException
错误:+FullyQualifiedErrorId:SqlException

这方面的代码如下:

    $server = "server"
    $database = "database"
    $A = $record.Text
    $B = $textB.Text
    $C = $textC.Text

    $insert = "INSERT INTO dbo.AMY (ColumnA, ColumnB, ColumnC) VALUES ($A,$B,$C)"

    $connectionTemplate = "Data Source=$server;Integrated Security=SSPI;Initial       Catalog=$database;"
    $connectionString = [string]::Format($connectionTemplate, $server, $database)
    $connection = New-Object System.Data.SqlClient.SqlConnection
    $connection.ConnectionString = $connectionString

    $command = New-Object System.Data.SqlClient.SqlCommand
    $command.CommandText = $insert
    $command.Connection = $connection

    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $command
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $connection.Close()

任何关于如何解决此问题的想法将不胜感激。

【问题讨论】:

  • 恕我直言,您在这里缺少代码的相关部分。我的 2 美分:您需要在构建 $insert 变量之前检查空值。
  • 我添加了我是如何获得这些值的,我想我不完全理解我缺少什么。我从表单中的用户输入中获取值。如果他们没有向其中一个文本字段添加内容,那么我希望数据库中的那个位置只有一个空白或空值。我尝试将变量设置为 $null 和空字符串,并且只有在文本字段中有实际数据时才更改它们,但我得到了同样的错误。
  • 我看了看,意识到我真正的问题是它只接受数字。我只测试过数字,但我也需要 B 和 C 来接受字符串。在数据库中 ColumnA 是唯一指定 int 的,所以我不确定为什么其他两个不能是字符串。

标签: sql sql-server powershell


【解决方案1】:

在构建插入命令的过程中测试 B 和 C 是否存在。

$insert = "INSERT INTO dbo.AMY (ColumnA, ColumnB, ColumnC) VALUES ($A, "
if ($B.Length) { $insert += "'$B', " } 
else { $insert += "NULL, " }
if ($C.Length) { $insert += "'$C')" }
else { $insert += "NULL)" }

【讨论】:

    【解决方案2】:

    问题最终是一个简单的语法错误,变量需要在字符串中特别是单引号的引号中,一旦我这样做了,它就完美地工作了。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多