Я пытаюсь вернуть данные из базы данных Azure для моего проекта xamarin

#c# #azure

#c# #azure

Вопрос:

Я очень новичок во всем этом. Я пытаюсь создать приложение для обслуживания таблиц для моего местного регбийного клуба. Я подключил свое приложение к базе данных sql Azure, пользователь может зарегистрироваться, однако, когда я пытаюсь войти в систему, ничего не происходит. Это мой класс для пользователя:

     using System;
namespace LeighRUFCapp.Model
{
    public class Users
    {
        // [PrimaryKey, AutoIncrement]
        public string ID { get; set; }

        //  [MaxLength(256)]
        public string Email { get; set; }
        public string Password { get; set; }
    }
}
 

ниже приведен мой xaml для страницы входа в систему;

 <?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LeighRUFCapp.LoginPages.LoginPage" xmlns:yummy="clr-namespace:Xamarin.Forms.PancakeView;assembly=Xamarin.Forms.PancakeView">
        <ContentPage.Content>
                <StackLayout BackgroundColor="#313131">
            <Image Source="logo.png" HorizontalOptions="CenterAndExpand" Margin="40" VerticalOptions="Center"></Image>

            <StackLayout Orientation="Vertical" Margin="20" AnchorY="0.5" VerticalOptions="StartAndExpand">
                <Entry Placeholder="Email" TextColor="White" PlaceholderColor="LightGray" Keyboard="Email" x:Name="EmailAddressEntry"></Entry>
                <Entry Placeholder="Password" TextColor="White" PlaceholderColor="LightGray" IsPassword="True" x:Name="UserPasswordEntry"></Entry>

                   <yummy:PancakeView BackgroundColor="#EFCC45" CornerRadius="20,20,20,20" HorizontalOptions="FillAndExpand" HeightRequest="50" Margin="25,0,25,0">
                  <yummy:PancakeView.Shadow>
                    <yummy:DropShadow Color="#232323" Offset="10,10"/>
                </yummy:PancakeView.Shadow>
                 <Button x:Name="LoginButton" Clicked="LoginButton_Clicked" Text="Login" FontSize="Large" HorizontalOptions="FillAndExpand" BorderColor="#000000" BackgroundColor="#EFCC45" FontFamily="helvetica"  TextColor="#000000"></Button>
                 </yummy:PancakeView>

                   <yummy:PancakeView BackgroundColor="#EFCC45" CornerRadius="20,20,20,20" HorizontalOptions="FillAndExpand" HeightRequest="50" Margin="25,0,25,0">
                  <yummy:PancakeView.Shadow>
                    <yummy:DropShadow Color="#232323" Offset="10,10"/>
                </yummy:PancakeView.Shadow>
                <Button x:Name="RegisterBtn" Clicked="RegisterBtn_Clicked"  Text="Register" HorizontalOptions="FillAndExpand" BorderColor="#000000" BackgroundColor="#EFCC45" FontFamily="helvetica" FontSize="Large" TextColor="#000000"></Button>

                 </yummy:PancakeView>

            </StackLayout>

                    <StackLayout>
                        <Button x:Name="Adminbtn" Clicked="Adminbtn_Clicked" Text="Admin" TextColor="#EFCC45" FontFamily="helvetica" FontSize="Subtitle" BackgroundColor="#313131"/>
                    </StackLayout>

        </StackLayout>
    </ContentPage.Content>
</ContentPage>
 

и мой c # для страницы входа в систему;

 using System;
using System.Collections.Generic;
using System.Linq;
using LeighRUFCapp.Homestuff;
using LeighRUFCapp.Model;

using Xamarin.Forms;

namespace LeighRUFCapp.LoginPages
{
    public partial class LoginPage : ContentPage
    {
        public LoginPage()
        {
            SetValue(NavigationPage.HasNavigationBarProperty, false);

            InitializeComponent();
        }

        private async void LoginButton_Clicked(System.Object sender, System.EventArgs e)
        {


            bool isEmailEmpty = string.IsNullOrEmpty(EmailAddressEntry.Text);
            bool isPasswordEmpty = string.IsNullOrEmpty(UserPasswordEntry.Text);

            if (isEmailEmpty || isPasswordEmpty)
            {
                await DisplayAlert("Error", "Your Email or Password is incorrect", "OK");
            }
            else
            {
                var user = await App.MobileService.GetTable<Users>().Where(u => u.Email == EmailAddressEntry.Text).ToListAsync();




                if (user != null)
                {
                    //if (Users.Password == UserPasswordEntry.Text)
                    //{
                    await Navigation.PushAsync(new HomePage());
                    /* }

                     else
                     {
                         //password is not being found in the table usersfor some reason
                         await DisplayAlert("Error", "Incorrect email or password", "OK");

                     }

                 }

                 else
                 {
                     await DisplayAlert("Error", "There was an error logging you in", "OK");

                 }*/
                }

            }
        }

        void RegisterBtn_Clicked(System.Object sender, System.EventArgs e)
        {
            App.Current.MainPage = new NavigationPage(new RegisterPage());

        }

        void Adminbtn_Clicked(System.Object sender, System.EventArgs e)
        {
            App.Current.MainPage = new NavigationPage(new AdminLogin());
        }
    }
}
 

Ответ №1:

Мой совет таков:

  1. Поместите извлечение данных за службу (WebAPI)
  2. Позвоните в службу из своего мобильного приложения

Это более безопасный и распространенный шаблон для мобильных приложений. Как правило, вы разрабатываете rest API с использованием JSON в качестве типа ответа. Это будет означать запуск службы в Visual Studio перед запуском приложения Xamarin (предположим, Android — если нет, вам в конечном итоге понадобится Mac), щелкнув правой кнопкой мыши. Или вы можете создать отдельный экземпляр сервиса. После отладки VS очень легко развертывается в облаке Azure.

Можете ли вы получить удаленный доступ к базе данных? Да, но вы должны отключить некоторые функции безопасности или использовать доступ через HTTPS или что-то подобное. Это не очень хороший шаблон, так как в конечном итоге вы получаете строки подключения в своем приложении. Не то чтобы мобильные приложения так просто перепроектировать, чтобы получить нужную информацию, но рекомендуется следовать рекомендациям.