65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 UWP 演示设计您的 Azure MySQL 数据库

2019年4月16日

CPOL

3分钟阅读

viewsIcon

1984

Azure MySQL 数据库,如何设计它,基本的 UWP 待办事项演示

在这篇博文中,我们将讨论 Azure MySQL 数据库 (微软 Imagine 计划(Dreamspark)学生免费提供),如何设计它,基本的 UWP 待办事项演示。

在之前的 博文中,我讨论了数据库创建过程,如何获取数据库信息(主机名、用户名、密码、连接字符串),以及如何将其连接到 C# 控制台应用程序。

现在,我们假设您已经拥有数据库信息,然后继续。

设计 MySQL 数据库

我们可以使用许多工具来连接到数据库,但在这里,我们将使用官方的 MySQL Workbench

可以从 此处 以及连接器下载 MySQL Workbench。

什么是连接器?

连接器是您在项目中包含的数据库驱动程序,以便能够通过您的应用程序与您的数据库交互和连接。

安装 Workbench 并使用默认设置后,我们打开它

workbenchMain

然后我们点击 Add(添加) 按钮来添加一个新的数据库

AddButton

我们插入数据库信息,然后点击 Ok(确定)

现在我们点击 New DB(新建数据库) 来建立连接。

ClickDB

在这里,您可以对您的数据库做任何您想做的事情。让我们去添加一个 Table(这是您通常会做的事情 :))。

createTable1

现在我们开始添加我们需要在数据库中的列,在这种情况下,我们只需要两列

  • idtodo: INT, 主键, Not Null, Unique, 自动递增
  • whatToDO: varchar(200)

createTable2

createTable3

然后我们点击 Apply(应用),等待一会儿,然后我们查看或添加我们需要的所有 SQL 脚本。然后,在向导中点击 Apply(应用)

注意

您可以看到创建表的脚本,您可以完全跳过我在这里所做的一切,直接去执行您的脚本。

createTable4

表创建成功,并已准备好使用!

createTable5

UWP 演示(基本待办事项应用)

在我们开始之前,请注意 Dreamspark 免费 MySQL 数据库限制为 4 个并发连接。因此,它最适合您的私人使用或用于测试目的。

我们将做什么?

  • 创建 UWP 项目
  • 引用连接器
  • 实现我们的 MVVM (Model-View-ViewModel)

创建项目

我们点击 File(文件) -> New Project(新建项目) -> 从 Installed List(已安装列表)中,我们点击 -> Visual C# ->Windows(Windows) -> Universal(通用) -> 然后 选择 UWP 项目:Blank App (Universal Windows)(空白应用程序 (通用 Windows))

引用连接器

addref

然后我们点击浏览并转到以下路径。请注意,“Connector.NET 6.9”版本可能因您阅读本文的时间而异,因此您应该自己去查找。

C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\RT

我们选择连接器,然后我们就可以开始了。

实现 MVVM

我们将只创建一个页面,其中包含我们的待办事项列表,以及一个文本框和一个按钮,以将文本框内容添加为新的待办事项。

待办事项模型

 public class Todo
    {
        public string whatToDO { get; set; }
        public Todo(string what)
        {
            whatToDO = what;
        }
    }

ViewModel (TodoViewModel.cs)

public class TodoViewModel
    {
        private static TodoViewModel _todoViewModel = new TodoViewModel();
        private ObservableCollection<Todo> _allToDos = new ObservableCollection<Todo>();

        public ObservableCollection<Todo> AllTodos
        {
            get
            {
                return _todoViewModel._allToDos;
            }
        }

        public IEnumerable<Todo> GetTodos()
        {
            try
            {
                using (MySqlConnection connection = 
                       new MySqlConnection("YOUR CONNECTION STRING HERE"))
                {
                    connection.Open();
                    MySqlCommand getCommand = connection.CreateCommand();
                    getCommand.CommandText = "SELECT whatToDO FROM todo";
                    using (MySqlDataReader reader = getCommand.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            _todoViewModel._allToDos.Add
                            (new Todo(reader.GetString("whatToDO")));
                        }
                    }
                }
            }
            catch(MySqlException)
            {
                // Handle it :)
            }
                return _todoViewModel.AllTodos;
        }

        public bool InsertNewTodo(string what)
        {
            Todo newTodo = new Todo(what);
            // Insert to the collection and update DB
            try
            {
                using (MySqlConnection connection = 
                       new MySqlConnection("YOUR CONNECTION STRING HERE"))
                {
                    connection.Open();
                    MySqlCommand insertCommand = connection.CreateCommand();
                    insertCommand.CommandText = 
                                  "INSERT INTO todo(whatToDO)VALUES(@whatToDO)";
                    insertCommand.Parameters.AddWithValue("@whatToDO", newTodo.whatToDO);
                    insertCommand.ExecuteNonQuery();
                    _todoViewModel._allToDos.Add(newTodo);
                    return true;
                }
            }
            catch(MySqlException)
            {
                // Don't forget to handle it
                return false;
            }
        }

        public TodoViewModel()
        { }

我们在 GetTodos() 中做了什么

  • 建立了连接
  • 我们打开了它
  • 初始化了命令(查询)
  • 执行了命令
  • 读取传入的值并初始化新的待办事项对象,然后将其添加到我们的 ObservableCollection 中,以便稍后进行数据绑定

我们在 InsertNewTodo(string what) 中做了什么

  • 首先创建了 Todo 类别的新对象并初始化它
  • 建立了连接
  • 我们打开了连接
  • 初始化了命令(查询)
  • 添加了查询字符串
  • 向查询中添加了任何参数
  • 执行了命令(查询)
  • 将新的待办事项添加到 ObservableCollection

注意

WinRT 的 MySQL API 不支持 SSL 连接,因此您必须通过在连接字符串中添加 SslMode=None 来将其关闭。

App.xaml.cs 代码

我们只是从我们的 ViewModel 创建一个 public static 实例,以便在整个应用程序中使用。

 public static TodoViewModel TODO_VIEW_MODEL = new TodoViewModel();

MainPage.xaml 代码

Main 网格内

<StackPanel Orientation="Vertical">
            <ListView x:Name="Todos">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock FontSize="25" 
                            Text="{Binding whatToDO}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <TextBox x:Name="NewTodoTxtBox" 
            FontSize="25" Header="New Todo:"/>
                <Button x:Name="InsertTodoBtn" 
                Click="InsertTodoBtn_Click" Content="Insert New Todo" 
                 Margin="0,20,0,0"/>
</StackPanel>  

MainPage 代码隐藏(在 MainPage 类中)

public MainPage()
        {
            this.InitializeComponent();
        }

        private void InsertTodoBtn_Click(object sender, RoutedEventArgs e)
        {
            // Try the View Model insertion and check externally for result
            App.TODO_VIEW_MODEL.InsertNewTodo(NewTodoTxtBox.Text);
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Todos.ItemsSource = App.TODO_VIEW_MODEL.GetTodos();
        }

我们完成了!

finalMySQL

  • 这里 下载完整的示例。
© . All rights reserved.