#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