System.Data.SqlClient.SqlCredential issue

时间:2016-01-22 08:49:50

标签: .net powershell .net-assembly credentials sqlconnection

我在System.Data.SqlClient.SqlCredential类中遇到了一些问题。我尝试使用此

在powershell中创建一个对象
cls;
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data");
$creds = New-Object System.Data.SqlClient.SqlCredential;

但我收到此错误消息

New-Object : Конструктор не найден. Не удается найти соответствующий    конструкто
р для типа System.Data.SqlClient.SqlCredential.
строка:3 знак:10
+ $creds = New-Object System.Data.SqlClient.SqlCredential;
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (:) [New-Object], PSArgumentExce 
   ption
    + FullyQualifiedErrorId :    CannotFindAppropriateCtor,Microsoft.PowerShell.C 
   ommands.NewObjectCommand

此错误消息的翻译如下:

找不到构造函数。无法为类型找到合适的构造函数。

我读了technet,发现System.Data.SqlClient.SqlCredential类包含在System.Data(System.Data.dll)中。

但我尝试加载此程序集,如前面的示例所示。我使用Windows 7,PowerShell 4.0。我安装了.NET Frameworks 4.6.1。我真的很感激任何帮助。

我尝试使用GodEater提供给我的提示,但仍然收到错误消息

cls;

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Data");

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = "Server=192.168.1.220,1433;Database=Archimed;";
$creds = New-Object System.Data.SqlClient.SqlCredential`
((Read-Host -AsSecureString), (Read-Host -AsSecureString));
$SqlConnection.Credential = $creds;

$SqlConnection.Open();
$SqlConnection.Close();

错误信息就像这样

New-Object : Не удается найти тип [System.Data.SqlClient.SqlCredential]: убедит
есь в том, что сборка, содержащая этот тип, загружена.
строка:7 знак:10
+ $creds = New-Object System.Data.SqlClient.SqlCredential`
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentExcepti 
   on
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewOb 
   jectCommand

System.Security.SecureString
System.Security.SecureString
Исключение при вызове "Open" с "0" аргументами: "Ошибка входа пользователя ""."
строка:11 знак:1
+ $SqlConnection.Open();
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SqlException

翻译如下:

找不到[System.Data.SqlClient.SqlCredential]的类型:确保已加载包含此类型的程序集

从“0”参数调用“打开”时出现异常:“用户登录失败”。

我为用户使用sa和1并传递。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但是以防万一有人偶然发现了它。

先前的答案几乎是正确的。您确实需要将用户ID和密码传递给构造函数,但是密码必须是安全字符串。

$SecurePassword = ConvertTo-SecureString -AsPlainText -Force "ThePassword"
$creds = New-Object System.Data.SqlClient.SqlCredential('UserName', $SecurePassword)

答案 1 :(得分:0)

据我所知,该类型的构造函数需要用户ID和密码 - 您无法在不指定的情况下创建它 - 因此您需要像这样调用它:

$creds = New-Object System.Data.SqlClient.SqlCredential('UserName','Password')

显然用您的实际用户名和密码替换它们。