如何导入npgsql模块?
How to import the npgsql module?
我需要从 PowerShell 脚本中连接到 PostgreSQL 数据库。但是如何在没有 VisualStudio 的情况下安装 npgsql?没有 nuget!
所以我尝试使用最新的 MSI 文件 (Npgsql-3.0.5.msi
) 在 GAC 中安装驱动程序。
使用 gacutil.exe
显示,它已安装:
Npgsql, Version=3.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL
但是PowerShell对此一无所知! Get-Module -ListAvailable
应该显示它但是:
PS C:\WINDOWS\system32> <b>(gmo -l n*).Name</b>
网络适配器
网络连接
NetEventPacketCapture
网络资料
NetNat
网络服务质量
网络安全
NetSwitch团队
网络TCPIP
网络WNV
网络连接状态
网络负载均衡集群
网络过渡
网络文件系统
PSC:\WINDOWS\system32>_
没有模块Npgsql
!
我正在搜索 Npgsql.dll
,它就在那里:
PS C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7> <b>dir</b>
Verzeichnis: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7
模式 LastWriteTime 长度 名称
---- -------------- ------ ----
-a--- 08.01.2016 08:10 446464 Npgsql.dll
PS C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7> _
由于无法识别模块 npgsql
我的 PowerShell 代码无法运行:
function getDBConnection ($MyDBServer, $MyDBPort, $MyDatabase, $MyUid, $MyPwd) {
$DBConnectionString = "Provider=PostgreSQL OLE DB Provider;Data Source=$MyDBServer;location=$MyDatabase;User ID=$MyUid;password=$MyPwd;timeout=1000;"
$DBConn = New-Object System.Data.OleDb.OleDbConnection;
$DBConn.ConnectionString = $DBConnectionString
try {
$DBConn.Open
} catch {
"Failed to connect! Error: "+ $_.Exception.Message
}
return $DBConn
}
function closeDBConnection ($DBConn) {
$DBConn.Close
}
$query = "select * from test_table1"
$MyDBConnection = getDBConnection "dbserver" 5432 "databasename" "user" "pass"
try {
$cmd = New-Object System.Data.OleDb.OleDbCommand($query, $MyDBConnection)
} catch {
"Failed to create command object! Error: " + $_.Exception.Message
}
...
$DBConn.Open
没有失败,但 属性 ConnectionState
在 Open
调用后仍然 Closed
。
OleDbCommand
实例的创建崩溃并显示德语错误消息:
Failed to create command object! Error: Für "OleDbCommand" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "2".
表示不存在带两个参数的重载方法
问题:
- 我需要做什么才能 install/configure 以便
Npgsql
在 PowerShell 中可见?
- 如何 load/import PowerShell 脚本或模块中的
Npgsql
模块?
如有疑问,请阅读 documentation. Get-Module -ListAvailable
only lists modules from the directories listed in $env:PSModulePath
。
-ListAvailable
Gets all installed modules. Get-Module gets modules in paths listed in the PSModulePath environment variable. Without this parameter, Get-Module gets only the modules that are both listed in the PSModulePath environment variable, and that are loaded in the current session. ListAvailable does not return information about modules that are not found in the PSModulePath environment variable, even if those modules are loaded in the current session.
但是,您可以简单地在脚本中导入带有完整路径的任何模块:
Import-Module 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7\Npgsql.dll'
允许在路径中使用通配符:
Import-Module 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\*\Npgsql.dll'
如果您希望能够按名称加载模块,请在 $env:PSModulePath
中列出的目录之一中创建子文件夹 Npgsql
,并将 DLL 放入该子文件夹。
好的,解决了!解决方法在这里:
使用 Windows 8.1 和几个 .NET 版本,直到版本 4.5,我们可以使用 Npgsql 3.0.5。
- 从 npgsql 网站下载 Npgsql-3.0.5.msi 和 运行 安装程序
- 搜索名为 'Npgsql.ll'
的 DLL
- 将此 dll 复制到您的本地项目目录(您有 powershell 脚本)
- 在脚本中使用 Add-Type -Path ".\Npgsql.dll"
加载 DLL
- 现在你可以开始了!
这里是我连接到远程 CentOS 服务器上的 PostgreSQL 服务器 运行ning 的一些示例代码:
Add-Type -Path ".\Npgsql.dll"
function getDBConnection ($MyDBServer, $MyDBPort, $MyDatabase, $MyUid, $MyPwd) {
$DBConnectionString = "server=$MyDBServer;port=$MyDBPort;user id=$MyUid;password=$MyPwd;database=$MyDatabase;pooling=false"
$DBConn = New-Object Npgsql.NpgsqlConnection;
$DBConn.ConnectionString = $DBConnectionString
$DBConn.Open()
return $DBConn
}
function closeDBConnection ($DBConn)
{
$DBConn.Close
}
$MyDBConnection = getDBConnection "db.mydomain.com" 5432 "databasename" "username" "password"
$query = "SELECT * FROM test_table1;"
$DBCmd = $MyDBConnection.CreateCommand()
$DBCmd.CommandText = $query
$adapter = New-Object -TypeName Npgsql.NpgsqlDataAdapter $DBCmd
$dataset = New-Object -TypeName System.Data.DataSet
$adapter.Fill($dataset)
$dataset.Tables[0]
closeDBConnection($MyDBConnection)
.....
npgsql 似乎与 System.Data.OleDb 兼容。所以technet.microsoft.com上的OleDb文档可以作为参考。
它可能有点晚了,但这里是如何在 Windows 10
上将 Npgsql 版本 4.0.2 包含在 powershell 中
注册包源 NuGet:
注册-PackageSource -provider NuGet -name nugetRepository -location http://www.nuget.org/api/v2
在具有管理员权限的 powershell 控制台中输入命令:
查找包 Npgsql |安装包
积极回答安全问题
3. 输入:
获取包 Npgsql
你会看到新安装的包 Npgsql
/
我不想安装 MSI,并且很难从 nuget 包中添加 Npgsql.dll。它具有来自其他程序集的依赖性,我试图单独收集它们,但在添加它们时遇到了不同类型的错误。
解决方案是使用 git 集线器上的存储库构建程序集。它适用于 Win10,然后我能够在 win 2012 上使用相同的程序集。
克隆或download/unzip 回购:
https://github.com/npgsql/npgsql
用Visual Studio打开Npgsql.sln,然后build/build解决方案(可能会看到一些错误,忽略)
然后将 dll 从 repofolder\npgsql\src\Npgsql\bin\Debug\net452 复制到您的 PS 项目
然后使用下面的代码片段添加所有这些程序集:
$bin = "C:\folder\with\DLLs"
Add-Type -Path "$bin\Npgsql.dll" -ReferencedAssemblies "$bin\System.*.dll"
$str = "Server=yourserver;Port=1521;Username=user;Password=pass;Database=somedb"
$conn = New-Object Npgsql.NpgsqlConnection $str
$conn.Open()
我需要从 PowerShell 脚本中连接到 PostgreSQL 数据库。但是如何在没有 VisualStudio 的情况下安装 npgsql?没有 nuget!
所以我尝试使用最新的 MSI 文件 (Npgsql-3.0.5.msi
) 在 GAC 中安装驱动程序。
使用 gacutil.exe
显示,它已安装:
Npgsql, Version=3.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7, processorArchitecture=MSIL
但是PowerShell对此一无所知! Get-Module -ListAvailable
应该显示它但是:
PS C:\WINDOWS\system32> <b>(gmo -l n*).Name</b>
网络适配器
网络连接
NetEventPacketCapture
网络资料
NetNat
网络服务质量
网络安全
NetSwitch团队
网络TCPIP
网络WNV
网络连接状态
网络负载均衡集群
网络过渡
网络文件系统
PSC:\WINDOWS\system32>_
没有模块Npgsql
!
我正在搜索 Npgsql.dll
,它就在那里:
PS C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7> <b>dir</b>
Verzeichnis: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7
模式 LastWriteTime 长度 名称
---- -------------- ------ ----
-a--- 08.01.2016 08:10 446464 Npgsql.dll
PS C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7> _
由于无法识别模块 npgsql
我的 PowerShell 代码无法运行:
function getDBConnection ($MyDBServer, $MyDBPort, $MyDatabase, $MyUid, $MyPwd) {
$DBConnectionString = "Provider=PostgreSQL OLE DB Provider;Data Source=$MyDBServer;location=$MyDatabase;User ID=$MyUid;password=$MyPwd;timeout=1000;"
$DBConn = New-Object System.Data.OleDb.OleDbConnection;
$DBConn.ConnectionString = $DBConnectionString
try {
$DBConn.Open
} catch {
"Failed to connect! Error: "+ $_.Exception.Message
}
return $DBConn
}
function closeDBConnection ($DBConn) {
$DBConn.Close
}
$query = "select * from test_table1"
$MyDBConnection = getDBConnection "dbserver" 5432 "databasename" "user" "pass"
try {
$cmd = New-Object System.Data.OleDb.OleDbCommand($query, $MyDBConnection)
} catch {
"Failed to create command object! Error: " + $_.Exception.Message
}
...
$DBConn.Open
没有失败,但 属性 ConnectionState
在 Open
调用后仍然 Closed
。
OleDbCommand
实例的创建崩溃并显示德语错误消息:
Failed to create command object! Error: Für "OleDbCommand" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "2".
表示不存在带两个参数的重载方法
问题:
- 我需要做什么才能 install/configure 以便
Npgsql
在 PowerShell 中可见? - 如何 load/import PowerShell 脚本或模块中的
Npgsql
模块?
如有疑问,请阅读 documentation. Get-Module -ListAvailable
only lists modules from the directories listed in $env:PSModulePath
。
-ListAvailable
Gets all installed modules. Get-Module gets modules in paths listed in the PSModulePath environment variable. Without this parameter, Get-Module gets only the modules that are both listed in the PSModulePath environment variable, and that are loaded in the current session. ListAvailable does not return information about modules that are not found in the PSModulePath environment variable, even if those modules are loaded in the current session.
但是,您可以简单地在脚本中导入带有完整路径的任何模块:
Import-Module 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\v4.0_3.0.5.0__5d8b90d52f46fda7\Npgsql.dll'
允许在路径中使用通配符:
Import-Module 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\*\Npgsql.dll'
如果您希望能够按名称加载模块,请在 $env:PSModulePath
中列出的目录之一中创建子文件夹 Npgsql
,并将 DLL 放入该子文件夹。
好的,解决了!解决方法在这里:
使用 Windows 8.1 和几个 .NET 版本,直到版本 4.5,我们可以使用 Npgsql 3.0.5。
- 从 npgsql 网站下载 Npgsql-3.0.5.msi 和 运行 安装程序
- 搜索名为 'Npgsql.ll' 的 DLL
- 将此 dll 复制到您的本地项目目录(您有 powershell 脚本)
- 在脚本中使用 Add-Type -Path ".\Npgsql.dll" 加载 DLL
- 现在你可以开始了!
这里是我连接到远程 CentOS 服务器上的 PostgreSQL 服务器 运行ning 的一些示例代码:
Add-Type -Path ".\Npgsql.dll"
function getDBConnection ($MyDBServer, $MyDBPort, $MyDatabase, $MyUid, $MyPwd) {
$DBConnectionString = "server=$MyDBServer;port=$MyDBPort;user id=$MyUid;password=$MyPwd;database=$MyDatabase;pooling=false"
$DBConn = New-Object Npgsql.NpgsqlConnection;
$DBConn.ConnectionString = $DBConnectionString
$DBConn.Open()
return $DBConn
}
function closeDBConnection ($DBConn)
{
$DBConn.Close
}
$MyDBConnection = getDBConnection "db.mydomain.com" 5432 "databasename" "username" "password"
$query = "SELECT * FROM test_table1;"
$DBCmd = $MyDBConnection.CreateCommand()
$DBCmd.CommandText = $query
$adapter = New-Object -TypeName Npgsql.NpgsqlDataAdapter $DBCmd
$dataset = New-Object -TypeName System.Data.DataSet
$adapter.Fill($dataset)
$dataset.Tables[0]
closeDBConnection($MyDBConnection)
.....
npgsql 似乎与 System.Data.OleDb 兼容。所以technet.microsoft.com上的OleDb文档可以作为参考。
它可能有点晚了,但这里是如何在 Windows 10
上将 Npgsql 版本 4.0.2 包含在 powershell 中注册包源 NuGet: 注册-PackageSource -provider NuGet -name nugetRepository -location http://www.nuget.org/api/v2
在具有管理员权限的 powershell 控制台中输入命令: 查找包 Npgsql |安装包 积极回答安全问题
3. 输入:
获取包 Npgsql
你会看到新安装的包 Npgsql
/
我不想安装 MSI,并且很难从 nuget 包中添加 Npgsql.dll。它具有来自其他程序集的依赖性,我试图单独收集它们,但在添加它们时遇到了不同类型的错误。
解决方案是使用 git 集线器上的存储库构建程序集。它适用于 Win10,然后我能够在 win 2012 上使用相同的程序集。
克隆或download/unzip 回购: https://github.com/npgsql/npgsql
用Visual Studio打开Npgsql.sln,然后build/build解决方案(可能会看到一些错误,忽略)
然后将 dll 从 repofolder\npgsql\src\Npgsql\bin\Debug\net452 复制到您的 PS 项目
然后使用下面的代码片段添加所有这些程序集:
$bin = "C:\folder\with\DLLs"
Add-Type -Path "$bin\Npgsql.dll" -ReferencedAssemblies "$bin\System.*.dll"
$str = "Server=yourserver;Port=1521;Username=user;Password=pass;Database=somedb"
$conn = New-Object Npgsql.NpgsqlConnection $str
$conn.Open()