System.Data.ODBC.OdbcException - 错误 - 28000

时间:2017-12-14 21:14:47

标签: .net sql-server odbc

我正在尝试通过ODBC连接将我的.NET Web服务连接到SQL Server。

这是我的ODBC连接

enter image description here

然后我通过VS2017在服务器资源管理器中创建了一个数据连接:

enter image description here

在web.config中,我有以下内容:

using(OdbcConnection connection = new OdbcConnection(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString))
using(OdbcCommand command = connection.CreateCommand() {
command.CommandText = "SELECT * FROM table1";
connection.Open(); // This is where I get the error
}

在我的代码中,我通过

连接
Login failed for user ''.

错误消息是:

if isinstance(value, datetime.datetime):

我注意到用户是空白的。我不明白为什么。我知道连接有效,因为我测试了它。

2 个答案:

答案 0 :(得分:0)

提供程序名称为System.Data.SqlClient,但您使用的是ODBC。

答案 1 :(得分:0)

您无法从存储的ODBC连接中获取用户名和密码。如果您打开Regedit并查看密钥

HKEY_CURRENTUSER\Software\ODBC\ODBC.INI\NGDEV

您永远不会找到密码密钥, LastUser 密钥也不代表您在拨打DSN时将此值传递给您的密码。
相反,当您再次重新配置已保存的ODBC时,它将用于初始化询问密码的对话框。

您需要将您的连接字符串更改为此类

<add name="MyConnection"  
           connectionString="Dsn=NGDEV;Uid=sa;Pwd=***whatever***"  
           providerName="System.Data.Odbc"/>

这当然为许多安全问题敞开了大门。

  • 首先:您不应该使用 sa 帐户连接到您的帐户 代码中的数据库。此用户仅保留用于管理 任务(在这种情况下也不是明智的选择),因为它可以 不仅可以访问您的数据库,还可以访问存储在该服一个 简单的mistep,你可以看看严重的问题。
  • 第二:在配置文件中写入明文密码是 另一个问题。您可以尝试encrypt the config section但是 如果您可以使用trusted connection进行连接,那将会更好。