Как изменить мой код, который работает с базой данных ACCESS, для работы с базой данных SQL - PullRequest
0 голосов
/ 27 сентября 2019

У меня запущен код для импорта файлов CSV в базу данных Access.Однако теперь у меня есть доступ к серверу SQL, и я хочу использовать тот же код, если это возможно, но не знаю, что изменить, чтобы адаптировать код

У меня есть набор работающего кода, который использует строку подключения, я добавляю параметрыи это работает.

$connectionString="Provider=Microsoft.Ace.OLEDB.12.0; Data Source=$inputDatabase" 
 $conn = New-Object System.Data.OleDb.OleDbConnection($connectionString)
 $conn.Open()
 $cmd = $Conn.CreateCommand()

 $cmd.CommandText = "INSERT INTO [Tabl1]([date],[zone],[location],[Plugin ID],[CVE],[CVSS],[Risk],[Host],[Protocol],[Port],[Name])
         VALUES(@date, @zone, @location, @PluginID, @CVE, @CVSS, @Risk,@Host,@Protocol,@Port,@Name)"```

        [void]$cmd.Parameters.Add('@date',      [System.Data.OleDb.OleDbType]::DateTime)
        [void]$cmd.Parameters.Add('@zone',      [System.Data.OleDb.OleDbType]::VarChar)

оба приведенных выше фрагмента кода показывают, как я настраиваю строку подключения, и быстрый пример того, как задаются 2 значения с их соответствующим типом переменной, это не веськодно фрагменты, которые я знаю, мне нужно изменить, чтобы он работал с сервером SQL, основная проблема в том, что я не знаю, какую строку $ connectionstring использовать с сервером SQL, или, например, как мне сделать так, чтобы источник данных указывал насетевой адрес сервера SQL и использует проверку подлинности Windows.

И во втором фрагменте кода, какой тип формата я использую, я знаю типы переменных, но я предполагаю, что если я изменю с ace.oledb.12,я должен изменить сегмент oldebtype.Сервер SQL находится на SQL 13.0.5426

1 Ответ

1 голос
/ 27 сентября 2019

Вам необходимо обновить строку подключения.Предполагая, что вы используете проверку подлинности Windows:

$ConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=SSPI' -f $ServerInstanceName, $DatabaseName

И вам следует использовать встроенный класс клиента SQL Server System.Net.SqlClient вместо классов OLEDB.

$conn = New-Object System.Data.SqlClient.SqlConnection $connectionString

И выВам нужно обновить типы параметров:

[void]$cmd.Parameters.Add('@date',      [System.Data.SqlDbType]::DateTime)
[void]$cmd.Parameters.Add('@zone',      [System.Data.SqlDbType]::VarChar)

Все остальное должно быть более или менее идентичным.


Вот рабочий скрипт PowerShell, который подключается к базе данных SQL Server, выбираетданные и заполняет таблицу данных:

$SqlQuery = 'SELECT * FROM Student WHERE Student_Id = @student_id'
$ConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=True' -f $SqlServer, $Database

$SqlConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $ConnectionString
$SqlCommand = New-Object -TypeName System.Data.SqlClient.SqlCommand -ArgumentList $SqlQuery, $SqlConnection
$SqlCommand.Parameters.Add('@student_id', [System.Data.SqlDbType]::VarChar, 10).Value = $Student_Id

$DataTable = New-Object -TypeName System.Data.DataTable -ArgumentList 'Student'

try {
    $SqlConnection.Open()
    $SqlDataReader = $SqlCommand.ExecuteReader()
    $DataTable.Load($SqlDataReader)
}
finally {
    $SqlConnection.Close()
}
$DataTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...