我创建了这样的连接字符串:
var connectionString = "Data Source=MyPC\\SQLExpress;Initial Catalog=TestDb;Integrated Security=false;User Id=TestUser;password=TestPwd"
我创建了一个这样的SQL连接:
var sqlConnection = new SqlConnection(connectionString);
然后我创建我的SqlBulkCopy对象:
var bulkData = new SqlBulkCopy(sqlConnection.ConnectionString, SqlBulkCopyOptions.KeepIdentity);
问题是,当批量复制尝试执行时,我收到错误18456,状态8错误消息。此错误表示密码不匹配。但是,我可以使用上面提供的确切凭据登录数据库。
所以,我逐步完成了我的程序并注意到了这一点:调试中的连接字符串看起来应该是用户ID和密码。但是,当我将光标悬停在批量复制sqlConnection.ConnectionString
上时,它会显示没有密码的整个连接字符串。它只有用户!出于某种原因,当我使用其中包含密码的连接字符串创建SQL连接时,似乎未使用我的密码。所以,在预感中,我将代码更改为:
var bulkData = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity);
它工作正常!所以,我的问题是,为什么当我使用其中包含密码的连接字符串创建SQL Connection时,密码不会包含在生成的SQL Connection的ConnectionString
属性中?
答案 0 :(得分:3)
除非您在连接字符串中包含Persist Security Info = True
,否则SqlConnection
会出于安全原因删除密码。