C# WPF入门学习番外篇(二) —— C# WPF使用数据库创建注册登录界面

news2024/11/23 15:40:32

C# WPF入门学习番外篇(二) —— C# WPF使用数据库创建注册登录界面

在这里插入图片描述

在这篇番外篇博客中,我们将介绍如何在C# WPF应用程序中使用数据库来创建一个简单的注册和登录界面。通过本教程,你将学习到如何在WPF中与数据库进行交互,以及如何实现用户注册和登录功能。

1. 准备工作

首先,确保你已经安装了必要的工具和库:

  • Visual Studio
  • MySQL数据库(或其他你选择的数据库)
  • MySQL Connector/NET(通过NuGet安装 MySql.Data 包)

准备工作在上一篇番外篇中已经讲过啦~
C# WPF入门学习番外篇(一)——C#使用WPF连接MySQL数据库

2. 配置数据库

创建一个名为 UserDB 的数据库,并创建一个名为 Users 的表:

CREATE DATABASE UserDB;
USE UserDB;

CREATE TABLE Users (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    Username VARCHAR(50) NOT NULL,
    Password VARCHAR(50) NOT NULL
);

这里说明一下我是用的MySQL,软件我用的jetbrains家的DataGrip,当然没有的话也不影响,可以使用MySQL自带的终端来对数据库进行操作。
在这里插入图片描述

3. 创建WPF项目

在Visual Studio中创建一个新的WPF项目。

4. 配置连接字符串

在项目的 App.config 文件中添加数据库连接字符串:

<configuration>
    <connectionStrings>
        <add name="UserDBConnectionString" connectionString="Server=localhost;Database=UserDB;User Id=myusername;Password=mypassword;" providerName="MySql.Data.MySqlClient" />
    </connectionStrings>
</configuration>

确保替换 myusernamemypassword 为你的数据库用户名和密码。

5. 创建WPF界面

MainWindow.xaml 中,设计一个简单的界面,包括注册和登录功能:

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="User Registration and Login" Height="400" Width="300">
    <Grid Margin="0,0,-4,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <TextBox x:Name="txtUsername" Margin="95,111,40,228"/>
        <PasswordBox x:Name="txtPassword"  Margin="95,160,40,179"/>
        <Button Content="Register" Click="Register_Click" Margin="77,291,72,19"/>
        <Button Content="Login" Click="Login_Click" Margin="77,210,72,100"/>
        <Label Content="账号" HorizontalAlignment="Left" Margin="50,111,0,0" VerticalAlignment="Top" Height="35"/>
        <Label Content="密码" HorizontalAlignment="Left" Margin="50,160,0,0" VerticalAlignment="Top" Height="35"/>
        <Label Content="注册" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top" Height="39" Width="280" FontSize="22" HorizontalContentAlignment="Center"/>
    </Grid>
</Window>

在这里插入图片描述

6. 编写后台代码

MainWindow.xaml.cs 中,添加注册和登录的逻辑:

using System;
using System.Windows;
using MySql.Data.MySqlClient;
using System.Configuration;

namespace WpfApp
{
    public partial class MainWindow : Window
    {
        string connectionString = ConfigurationManager.ConnectionStrings["UserDBConnectionString"].ConnectionString;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Register_Click(object sender, RoutedEventArgs e)
        {
            string username = txtUsername.Text;
            string password = txtPassword.Password;

            if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
            {
                MessageBox.Show("Username and password cannot be empty.");
                return;
            }

            try
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    string query = "INSERT INTO Users (Username, Password) VALUES (@username, @password)";
                    MySqlCommand cmd = new MySqlCommand(query, conn);
                    cmd.Parameters.AddWithValue("@username", username);
                    cmd.Parameters.AddWithValue("@password", password);
                    cmd.ExecuteNonQuery();
                }

                MessageBox.Show("Registration successful.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }

        private void Login_Click(object sender, RoutedEventArgs e)
        {
            string username = txtUsername.Text;
            string password = txtPassword.Password;

            if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
            {
                MessageBox.Show("Username and password cannot be empty.");
                return;
            }

            try
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    string query = "SELECT COUNT(*) FROM Users WHERE Username = @username AND Password = @password";
                    MySqlCommand cmd = new MySqlCommand(query, conn);
                    cmd.Parameters.AddWithValue("@username", username);
                    cmd.Parameters.AddWithValue("@password", password);
                    int count = Convert.ToInt32(cmd.ExecuteScalar());

                    if (count > 0)
                    {
                        MessageBox.Show("Login successful.");
                    }
                    else
                    {
                        MessageBox.Show("Invalid username or password.");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
    }
}

详细说明

  1. 安装 MySQL Connector/NET

    • 使用 NuGet 安装 MySql.Data 包,这个包提供了与 MySQL 服务器通信所需的所有类。
  2. 配置连接字符串

    • App.config 中配置连接字符串,以便应用程序可以连接到数据库。
  3. 编写 WPF 界面

    • 设计一个简单的注册和登录界面,包含用户名和密码输入框,以及注册和登录按钮。
  4. 编写后台代码

    • 使用 MySqlConnection 类连接到数据库。
    • 在注册按钮点击事件中,执行插入操作将新用户信息保存到数据库中。
    • 在登录按钮点击事件中,执行查询操作验证用户信息。

总结

通过这个教程,你学会了如何在WPF应用程序中连接并使用MySQL数据库,创建一个基本的用户注册和登录界面。你可以根据需要扩展这个示例,添加更多功能和验证逻辑,以构建一个更复杂和完整的应用程序。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提高SOA噪声系数和饱和功率的方法

----翻译自Kevin Carney, Robert Lennox等人撰写的文章 摘要 针对多触点体半导体光放大器&#xff08;SOA&#xff09;&#xff0c;使用速率方程模型研究了有源层纵向载流子密度分布特性。结果表明&#xff0c;噪声系数和饱和输出光功率都可以通过偏置电流分布进行优化。本文还…

Apache HttpClient总览

一、重大版本 Apache HttpClient 4.x 系列 • HttpClient 4.0&#xff08;发布于2008年左右&#xff09;&#xff1a;这是一个重要的里程碑&#xff0c;标志着HttpClient从Jakarta Commons项目转移到Apache HttpComponents项目。4.0版进行了大量的重构&#xff0c;引入了新…

Turbo Console Log自定义配置

写log太麻烦了&#xff1f;可以用下vscode中的Turbo Console Log的插件 因为vscode的其他快捷键可能会和这个插件产生冲突&#xff0c;所以可以从这里设置自定义不重复的快捷键。我这里用的shiftaltG用来生成log 我用的是显示第多少行和路径名 效果&#xff1a; 还有其他的…

从爱好到收入AI贴纸变现的五种途径,你尝试过几种?你会制作吗?

一、AI贴纸变现方式&#xff1a; 贴纸变现的方式主要包括以下几种&#xff1a; 1、广告变现 通过在小红书、公众号等可发图文的自媒体平台发布你制作的可爱贴纸&#xff0c;从而实现对可爱贴纸喜爱的人士观看并成为你的粉丝。粉丝达到一定数量即可接商业广告变现。 2、电商变…

js算法 计算每一列的平均值 求matrix数组对应列的平均值 组成一个新的数组 matrix数组有6行 如果某一行里的值是0则不纳入平均的分母里

let matrix [[18.95, 21.1, 0, 23, 0, 0, 0],[19, 25.3, 24.64, 0, 0, 0, 21.24],[22.18, 24.5, 20, 0, 26, 0, 0],[18.41, 19.05, 22.41, 27.67, 17, 0, 0],[14.86, 19.31, 0, 19.4, 18.71, 0, 25.04],[18.93, 19.53, 0, 0, 0, 0, 0] ];// 获取矩阵的列数 const numCols mat…

网络安全等级保护基本要求解读- 安全计算环境-应用系统和数据安全

概述 越来越多的企业用户已将核心业务系统转移到网络上&#xff0c;Web浏览器成为业 务系统的窗口&#xff0c;应用系统面临更多的安全威胁&#xff1b;并且由于各种原因使得其 存在较多的安全漏洞。 在此背景下&#xff0c;如何保障企业的应用安全&#xff0c;尤其是Web应用…

现场直击 | 飞凌嵌入式亮相2024上海国际嵌入式展

6月12日&#xff0c;2024上海国际嵌入式展&#xff08;embedded world China 2024&#xff09;在上海世博展览馆开幕。飞凌嵌入式亮相3号馆646展位&#xff0c;聚焦人工智能、智慧交通、工业互联网、智慧医疗、电力与储能等领域&#xff0c;旨在为全球客户带来一场技术与创新的…

MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

接上篇&#xff1a;链接: 现在有一个生产计划&#xff0c;甲乙丙3个品类共16个产品&#xff0c;生产时间6天&#xff0c;每天甲品类可以生产1张单&#xff0c;乙3张&#xff0c;丙1张&#xff0c;请用MySQL写出H列的效果 第二种写法&#xff1a; -- 使用WITH子句创建CTE WITH…

《500 Lines or Less》(4)Contingent: A Fully Dynamic Build System(构建系统)

介绍 构建系统长期以来一直是计算机编程中的标准工具。 标准 make 构建系统由其作者获得 ACM 软件系统奖&#xff0c;于 1976 年首次开发。它不仅允许您声明一个输出文件依赖于一个&#xff08;或多个&#xff09;输入文件&#xff0c;而且可以递归地执行此操作。例如&#xf…

MySQL(5)

聚合函数 GROUP BY 的使用 需求&#xff1a;查询各个部门的平均工资&#xff0c;最高工资SELECT department_id,AVG(salary),SUM(salary)FROM employeesGROUP BY department_id;需求&#xff1a;查询各个job_id的平均工资SELECT job_id,AVG(salary)FROM employeesGROUP BY jo…

LabVIEW Actor架构特点与适用范围

LabVIEW的Actor架构提供了一种基于消息传递的并行任务管理方式&#xff0c;适合复杂系统的模块化设计。其特点包括高可扩展性、灵活的消息传递和并行处理能力。维护和修改要求较高&#xff0c;适合有一定经验的开发人员。对于中小型项目&#xff0c;可考虑选择更简单的状态机架…

使用winscp 通过中转机器(跳板机、堡垒机)密钥远程连接服务器,保姆级别教程

1.winscp下载地址 winscp下载 2.安装自己选择位置 3.连接服务器 到这里,基本就是没有壁垒机的就可直接连接,传递文件 4.配置中转服务器(壁垒机、跳板机) 选择高级选项 配置utf-8的编码格式 配置中转服务器(壁垒机、跳板机) 设置中专机的密码或者私钥 配置私钥

Vue3使用datav3报错问题解决

报错&#xff1a;Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 修改package.json 修改为 "module": "./es/index.mjs",

《一头扎进》系列之Python+Selenium框架设计篇22- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1. 简介 前边宏哥一边一边的喊框架&#xff0c;就如同一边一边的喊狼来了&#xff01;狼来了&#xff01;.....这回是狼没有来&#xff0c;框架真的来了。从本文开始宏哥将会一步一步介…

Django+Vue.js怎么实现搜索功能

一.前言 类似这样的搜索功能 二.前端代码 <div class"form-container"><div class"form-group"><label for"departure-city">出发城市</label><select v-model"departureCity" id"departure-city&q…

CentOS系统停服进入倒计时,用户该如何应对?

本月30日&#xff0c;CentOS 7将正式停服。 凭借开源免费、稳定、硬件兼容性等特性&#xff0c;CentOS深受中国乃至全世界厂商、开发者和用户的青睐&#xff0c;应用范围极为广泛。 停服停更&#xff0c;对于广大用户来说也是一项巨大的考验&#xff0c;这意味着用户将无法获得…

【web APIs】快速上手Day02

文章目录 Web APIs - 第2天事件事件监听案例一 :京东点击关闭顶部广告案例二&#xff1a;随机点名案例拓展知识-事件监听版本 双击事件 事件类型鼠标事件综合案例-轮播图完整版 焦点事件综合案例-小米搜索框案例 键盘事件文本事件 事件对象综合案例-按下回车发布评论 环境对象回…

VBA实战(Excel)(6):报错处理

前言 在运行VBA的过程中会有一些报错&#xff0c;例如类型不匹配等运行错误。On Error错误处理程序能直接有效的解决报错。但是当程序逻辑复杂时&#xff0c; 使用On Error会掩盖其他的未知错误&#xff0c;所以应尽可能想办法排除错误&#xff0c;或在已知功能范围内使用。 …

【有用】docker在windows下使用详情

在Windows下安装和使用Docker可以按照以下步骤进行&#xff1a; 安装 Docker Desktop 系统要求 • Windows 10 64-bit: Pro, Enterprise, or Education (1607 Anniversary Update, Build 14393 or later) • Windows 11 64-bit: Pro, Enterprise, or Education • Windows 10 …

python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析

目录 python长方形周长面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python长方形周长面积 2024年3月 python编程等级考试级编程题 一、…