Ниже приведен краткий вариант моего кода, так как он относится к доступу db.
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
namespace DataAccess
{
public class DbConnection
{
public string connString = "Data Source=[Insert IP];Initial Catalog=MOSAIQ;Persist Security Info=True;User ID=[Insert User];Password=[Insert Password]";
public void CreateConnection()
{
using (SqlConnection conn = new SqlConnection(connString))
{
try
{
conn.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
По соображениям безопасности я удалил учетные данные IP и пользователя. При этом я скопировал приведенную выше строку соединения непосредственно из свойств проводника сервера, который успешно подключился к моему db.
При выполнении этого кода при выполнении conn.Open()
происходит ошибка:
Кажется довольно очевидным, что во время проверки есть проблема. Предоставляемые учетные данные - это те, которые используются для проверки подлинности SQL.
Почему я могу подключиться через серверный проводник, но не напрямую через мой код? Что делает Visual Studio для меня, что я, похоже, не могу сделать сам?
Порты открыты, брандмауэр не является проблемой. Я в тупике, и как новобранец в этом вопросе был бы признателен за дальнейшие указания.
Я пытаюсь подключиться к SQL Server 2008 R2, используя Visual Studio 2013.
Для тех, кто может столкнуться с подобными проблемами. Я сохраняю свои решения на сетевом диске через работу. Поскольку я открывал и запускал свое решение из этого сетевого местоположения по той причине, о которой я еще не знал, он использовал мои учетные данные Windows вместо учетных данных SQL, которые я передавал на SQL-сервер. После того как решение было перенесено на мою локальную рабочую станцию, метод работал так, как ожидалось. Любое понимание того, что более конкретно происходит, будет представлять интерес.
В качестве теста попробуйте использовать SqlConnectionStringBuilder
System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
//Or Supply User and Password
builder["Connect Timeout"] = 1000;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Если вы это сделаете и все еще испытываете ошибку, переходите к тестированию сети.
<add name="RM_V1.0CS1" connectionString="Data Source=SERVER;Initial Catalog=DB;User ID=sa;Password=Password" providerName="System.Data.SqlClient" />
Изменить явно установленный провайдер: