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





0/5 (0投票)
Azure MySQL 数据库,如何设计它,基本的 UWP 待办事项演示
在这篇博文中,我们将讨论 Azure MySQL 数据库 (微软 Imagine 计划(Dreamspark)学生免费提供),如何设计它,基本的 UWP 待办事项演示。
在之前的 博文中,我讨论了数据库创建过程,如何获取数据库信息(主机名、用户名、密码、连接字符串),以及如何将其连接到 C# 控制台应用程序。
现在,我们假设您已经拥有数据库信息,然后继续。
设计 MySQL 数据库
我们可以使用许多工具来连接到数据库,但在这里,我们将使用官方的 MySQL Workbench。
可以从 此处 以及连接器下载 MySQL Workbench。
什么是连接器?
连接器是您在项目中包含的数据库驱动程序,以便能够通过您的应用程序与您的数据库交互和连接。
安装 Workbench 并使用默认设置后,我们打开它
然后我们点击 Add(添加) 按钮来添加一个新的数据库
我们插入数据库信息,然后点击 Ok(确定)。
现在我们点击 New DB(新建数据库) 来建立连接。
在这里,您可以对您的数据库做任何您想做的事情。让我们去添加一个 Table(这是您通常会做的事情 :))。
现在我们开始添加我们需要在数据库中的列,在这种情况下,我们只需要两列
idtodo
: INT, 主键, Not Null, Unique, 自动递增whatToDO
:varchar(200)
和
然后我们点击 Apply(应用),等待一会儿,然后我们查看或添加我们需要的所有 SQL 脚本。然后,在向导中点击 Apply(应用)。
注意
您可以看到创建表的脚本,您可以完全跳过我在这里所做的一切,直接去执行您的脚本。
表创建成功,并已准备好使用!
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))。
引用连接器
然后我们点击浏览并转到以下路径。请注意,“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();
}
我们完成了!
- 从 这里 下载完整的示例。