2017-06-26 28 views
0

我得到我的PowerShell腳本的錯誤是:SQL的ExecuteNonQuery錯誤PowerShell中查詢與布爾

Exception calling "ExecuteNonQuery" with "0" argument(s): "Invalid column name 'False'.

function InsertData { 
    Param (
    [string]$username, 
    [string]$fullname, 
    [string]$email, 
    [string]$phone 
    ) 
    $DBServer = "SERVERNAME" 
    $DBName = "Tool" 
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection 
    $sqlConnection.ConnectionString = "Server=$DBServer;Database=$DBName;Integrated Security=False;User Id = User;password = password" 
    $sql = "INSERT INTO Employee (LocationId,FullName,username,email,phone,EquipId,SystemDetailId,migrationdate,UAT,bdpaccess) VALUES ('" + $location + "','" + $fullname + "','" + $username + "','" + $email + "','" + $phone + "',5,4," + $migrationdate + ",False,False)" 

    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand 
    $sqlCommand.Connection = $sqlConnection 

    $sqlCommand.CommandText = $sql 

    write-host $sql 
    $sqlConnection.Open() 
    $sqlCommand.ExecuteNonQuery() 
    $sqlConnection.Close() 
} 

我顯然是做錯了什麼地方我打字「假,假「作爲聲明的一部分。我嘗試了所有大寫,小寫,0和1,沒有任何作用。當我使用Write-Host $ sql將它寫入powershell命令窗口時,它看起來很好。

+0

如果SQL數據類型是位,則爲文字指定零。考慮一個參數化查詢。 –

+0

這是怎麼回事?它看起來像一個SQL注入噩夢對我來說。甚至像一個有全名撇號的人的良性數據(「O'brien」,Bobby Tables)也會殺死這個死人。 –

+0

我試過參數,但他們沒有工作,他們得到了太多的錯誤。 –

回答

2

Sql Server(與大多數其他數據庫一樣)沒有真正的布爾類型。沒有False。它確實有bit類型,其值爲0(false)和1(true)。我還看到char(1)(即:'Y''N')和DateTime類型(其中NULL爲false,任何其他值爲字段成爲真的日期)被用作流行的替代方法。

雖然我在這裏,但該代碼看起來很可怕。 Sql注入是一件真實的事情,這是一件大事。即使是一些姓氏爲「O'Brien」的良性數據,也可以大大減少這個問題。您需要查看parameterized queries。至少,查看更多查詢文本,我懷疑$migrationdate值需要單引號。

+0

嘗試過參數,但他們沒有工作,他們得到了太多的錯誤。 我不擔心注射,這是不公開的。沒有人在任何領域插入任何東西。它是PowerShell。我通過從命令提示符鍵入它來調用它。 –

+0

另外我嘗試了$ migrationdate左右的引號,它並不是那樣的。字符串說2/20/2017。 –

+0

幫我一個忙,不要停下來,直到你能正確插入一個帶有撇號的名字。它並不總是關於惡意注入;完全正常的數據也可以打破這一點,並且參數化查詢是最簡單和最好的解決方案。 –