Ошибка: не удается подключиться к браузеру SQL Server. Убедитесь, что браузер SQL Server запущен

#c# #sql-server #xamarin

#c# #sql-сервер #xamarin

Вопрос:

Я делюсь своим кодом для подключения к SQLSERVER :

 public class Context:DbContext
{
    private readonly IDbConn dbConn;
    public Context()
    {
        dbConn = new DbConn();
    }

    public DbSet<table1> t1{ get; set; }
    public DbSet<table2> t2{ get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(dbConn.Connection);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<table1>().HasKey(x => new { x.column1, x.column2});

        modelBuilder.Entity<table2>().HasKey(x => new { x.column1, x.column2});
    }
}
  
 public class DbConn : IDbConn
{
    private SqlConnection sqlConnection;

    public SqlConnection Connection
    {
        
        get
        {
            return new SqlConnection(@"SERVER=xxxxxxx;Initial Catalog=xxxxxxx;User ID=xxxxxx; Password=xxxxxx");
        }
    }
}
  
 public class Test
{
    public static table1 GetFirst()
    {
        using (var context = new Context())
        {
            var cb = context.t1.FirstOrDefault();    //The error occurs here
            return cb;
        }
    }

}
  

Я новичок в проекте XAMARIN.
Я пытаюсь подключиться к SQLSERVER и получить некоторые данные из базы данных, но при выполнении запроса LINQ я получаю сообщение об ошибке. Я уже пытался изменить строки подключения, но все еще получаю ту же ошибку.
Может кто-нибудь помочь мне устранить эту ошибку.

Спасибо

Комментарии:

1. Вы пытались следовать инструкциям в сообщении об ошибке? Как запустить браузер SQL Server?

2. Спасибо за ваш ответ, и да, я проверил службы, он активирован.

3. Это скорее проблема со средой… у вас разные сети на клиенте и сервере, или брандмауэр, или сервер принимает подключения только с локального хоста…

4. Спасибо за комментарий, но у нас много программного обеспечения, подключенного к базе данных, все работает должным образом для другого проекта. В этом проекте XAMARIN я использую EF Core SQLServer для подключения, но он не работает, может быть, в моем коде ошибка? Может быть, я что-то забыл?

5. вы не должны этого делать. Прямое подключение мобильного клиента к серверу SQL представляет собой серьезную угрозу безопасности, и его следует избегать. Использование уровня веб-сервиса между вашим клиентом и базой данных является общепринятой наилучшей практикой.

Ответ №1:

Я думаю, что если ваш sql Server подключен к фиксированному порту, вы можете просто сказать, какой порт он использует. Обычно не требуется для стандартных портов

 return new SqlConnection(@"Data Source=xxxxxxx,portnumberhere;Initial Catalog=xxxxxxx;User ID=xxxxxx; Password=xxxxxx");
  

если вы используете динамические порты, вам обычно необходимо указать имя экземпляра.

 return new SqlConnection(@"Data Source=xxxxxxxmyinstance;Initial Catalog=xxxxxxx;User ID=xxxxxx; Password=xxxxxx");
  

убедитесь, что брандмауэры не блокируют трафик между вами и сервером, который вы используете, и, как говорится в сообщении, в некоторых случаях вам может потребоваться убедиться, что служба браузера на сервере базы данных запущена, особенно при использовании динамических портов.

служба браузера

Редактировать:

Я думаю, проблема может заключаться в том, что вы используете

 return new SqlConnection(@"SERVER=xxxxxxx;Initial Catalog=xxxxxxx;User ID=xxxxxx; Password=xxxxxx");
  

вместо этого выключено

 return new SqlConnection(@"Data Source=xxxxxxx;Initial Catalog=xxxxxxx;User ID=xxxxxx; Password=xxxxxx");
  

Комментарии:

1. Спасибо за ваш комментарий, извините, я забыл сказать это в своем сообщении, я использую динамические порты, и моя строка подключения содержит экземпляр, как вы сказали (xxxxxx myinstance).

2. Все службы уже активированы, с брандмауэрами проблем нет

3. Можете ли вы подключиться с помощью чего-либо, например, Sql Management Studio на этом компьютере?

4. На самом деле это может быть, это должно быть return new SqlConnection (@»Источник данных = xxxxxxx myinstance; Начальный каталог = xxxxxxx; Идентификатор пользователя = xxxxxx; Пароль = xxxxxx»); вместо того, чтобы сервер отредактировал мой первоначальный ответ, чтобы исправить это

5. Да, я могу подключиться к серверу с помощью SqlManagement