C#窗体-数据库连接及登录功能的实现案例

下面是“C#窗体-数据库连接及登录功能的实现案例”的攻略:

1. 案例需求

我们需要开发一个C#窗体应用程序,要求实现以下功能:

  1. 与数据库建立连接
  2. 用户登录功能,登录成功后跳转到主页面
  3. 用户登录失败,展示错误提示

2. 开发步骤

2.1 数据库连接

我们可以使用ADO.NET来实现与数据库的连接。首先需要在项目中添加数据库连接:

  1. 打开Visual Studio,在Solution Explorer中右键单击项目名称
  2. 选择添加 -> 新建项 -> 数据 -> 数据库,命名为Database1.mdf
  3. 双击Database1.mdf文件,在Server Explorer中右键单击数据库名称,选择新建查询
  4. 输入以下SQL语句,创建一个名为Users的表格,并添加两条测试数据:

```sql
CREATE TABLE [dbo].[Users] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR (50) NOT NULL,
[Pwd] VARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

INSERT INTO Users (Name, Pwd) VALUES('user1', '123456');
INSERT INTO Users (Name, Pwd) VALUES('user2', '123456');
```

  1. 单击“运行”按钮,确保查询执行没有问题。

然后就可以在C#代码中进行数据库连接了。以下是连接数据库的代码示例:

using System.Data.SqlClient;

namespace MyNamespace
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
            SqlConnection connection = new SqlConnection(connectionString);
            try
            {
                connection.Open();
                MessageBox.Show("数据库连接成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据库连接失败:" + ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }
    }
}

具体解释如下:

  1. Form1类中,定义了连接字符串connectionString,这里我们使用本地数据库。
  2. button1_Click事件中,创建SqlConnection对象,传入连接字符串参数,调用Open来打开连接。
  3. 如果连接成功会弹出一个消息框,如果连接失败会弹出错误提示。

2.2 登录功能

数据库连接成功后,我们需要实现用户登录功能。以下是登录功能的代码示例:

private void button1_Click(object sender, EventArgs e)
{
    string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
    SqlConnection connection = new SqlConnection(connectionString);
    string name = textBox1.Text.Trim();
    string password = textBox2.Text;

    string sql = $"SELECT COUNT(*) FROM Users WHERE Name=@name AND Pwd=@pwd";
    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@name", name);
    command.Parameters.AddWithValue("@pwd", password);

    try
    {
        connection.Open();
        int count = Convert.ToInt32(command.ExecuteScalar());
        if (count > 0)
        {
            MessageBox.Show("登录成功!");
        }
        else
        {
            MessageBox.Show("用户名或密码错误!");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("登录失败:" + ex.Message);
    }
    finally
    {
        connection.Close();
    }
}

具体解释如下:

  1. button1_Click事件中,获取用户名和密码。
  2. 构造SQL语句,使用SELECT COUNT(*)来查询是否存在此用户,并使用SqlCommand对象传入参数。
  3. 调用ExecuteScalar方法来执行查询,返回结果为一个整数,此处我们直接判断结果是否大于0即可。
  4. 如果查询结果大于0,表示登录成功,弹出成功提示框,否则弹出失败提示框。
  5. 记得在finally块中关闭数据库连接。

2.3 示例说明

示例一

以下是一个带注释的完整代码示例:

using System;
using System.Data.SqlClient;

namespace MyNamespace
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
            SqlConnection connection = new SqlConnection(connectionString);
            try
            {
                connection.Open();
                MessageBox.Show("数据库连接成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据库连接失败:" + ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
            SqlConnection connection = new SqlConnection(connectionString);
            string name = textBox1.Text.Trim();
            string password = textBox2.Text;

            string sql = $"SELECT COUNT(*) FROM Users WHERE Name=@name AND Pwd=@pwd";
            SqlCommand command = new SqlCommand(sql, connection);
            command.Parameters.AddWithValue("@name", name);
            command.Parameters.AddWithValue("@pwd", password);

            try
            {
                connection.Open();
                int count = Convert.ToInt32(command.ExecuteScalar());
                if (count > 0)
                {
                    MessageBox.Show("登录成功!");
                }
                else
                {
                    MessageBox.Show("用户名或密码错误!");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("登录失败:" + ex.Message);
            }
            finally
            {
                connection.Close();
            }
        }
    }
}

以上示例可以直接运行,并且弹出的消息框会提示“数据库连接成功”或“数据库连接失败”。

示例二

为了方便测试和展示,我们可以先在Program.cs文件中添加一个数据初始化的方法,用于初始化数据库数据:

class Program
{
    static void Main(string[] args)
    {
        InitTestData();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LoginForm());
    }

    static void InitTestData()
    {
        string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            string sql = @"
                IF OBJECT_ID('dbo.Users', 'U') IS NULL
                    CREATE TABLE [dbo].[Users] (
                        [Id]    INT          IDENTITY (1, 1) NOT NULL,
                        [Name]  VARCHAR (50) NOT NULL,
                        [Pwd]   VARCHAR (50) NOT NULL,
                        PRIMARY KEY CLUSTERED ([Id] ASC)
                    );
                TRUNCATE TABLE Users;
                INSERT INTO Users (Name, Pwd) VALUES('test', '123456');
            ";
            SqlCommand command = new SqlCommand(sql, connection);
            command.ExecuteNonQuery();
        }
    }
}

运行程序,会自动创建名为Users的表格,并添加一条测试数据。然后修改LoginForm的代码,在登录成功后跳转到一个主界面:

public partial class LoginForm : Form
{
    public LoginForm()
    {
        InitializeComponent();
    }

    private void btnLogin_Click(object sender, EventArgs e)
    {
        string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True";
        SqlConnection connection = new SqlConnection(connectionString);
        string name = txtName.Text.Trim();
        string password = txtPassword.Text;

        string sql = $"SELECT COUNT(*) FROM Users WHERE Name=@name AND Pwd=@pwd";
        SqlCommand command = new SqlCommand(sql, connection);
        command.Parameters.AddWithValue("@name", name);
        command.Parameters.AddWithValue("@pwd", password);

        try
        {
            connection.Open();
            int count = Convert.ToInt32(command.ExecuteScalar());
            if (count > 0)
            {
                MessageBox.Show("登录成功!");
                this.Hide();
                MainForm mainForm = new MainForm();
                mainForm.Show();
            }
            else
            {
                MessageBox.Show("用户名或密码错误!");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("登录失败:" + ex.Message);
        }
        finally
        {
            connection.Close();
        }
    }
}

现在运行程序,输入正确的用户名和密码,会弹出“登录成功”的提示框,并跳转到主页面。输入错误的用户名或密码,会弹出“用户名或密码错误”的提示框。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#窗体-数据库连接及登录功能的实现案例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Entity Framework使用LINQ操作实体

    下面我将为你详细讲解如何使用Entity Framework使用LINQ操作实体。 什么是Entity Framework Entity Framework(EF)是一个面向对象的ORM(Object/Relational Mapping,对象关系映射)框架。通过EF,我们可以将数据库中的数据转换为对象,在程序中使用对象的方式操作数据库。它使得我们可以使用像…

    C# 2023年6月3日
    00
  • EF Core基础入门教程

    EF Core是一个轻量级的、可扩展的、基于.NET Core的ORM框架,可以让我们更方便地操作数据库。下面的教程将介绍EF Core的基本概念和用法,以及如何使用EF Core在.NET Core应用程序中进行数据持久化。 第一步 安装EF Core 首先,在你的.NET Core项目中,需要通过NuGet安装EF Core相关的包。打开Visual S…

    C# 2023年5月31日
    00
  • Blazor UI库 Bootstrap Blazor 快速上手 (v7.5.7)

    最近组件库更新比较频繁,有些同学感觉有点迷茫,就着今天刚上了张老板一节课立马撸个新的上手教程回馈社区, ;-> 1.新建工程b18QuickStartv757,将项目添加到解决方案中 dotnet new blazorserver -o b18QuickStartv757 dotnet sln add b18QuickStartv757/b18Quic…

    C# 2023年5月4日
    00
  • asp.net中生成缩略图并添加版权实例代码

    你需要掌握以下内容: 通过使用 System.Drawing 命名空间,将图片文件读入 Bitmap 对象。 创建一个新的 Bitmap 对象,调用 Graphics 对象将原始图片画到新的 Bitmap 对象上,并指定新的大小。 通过 Image.Save 方法将缩略图保存为新的文件。 添加版权信息。 下面是示例代码和详细步骤: 1. 通过使用 Syste…

    C# 2023年5月31日
    00
  • C#开发Windows窗体应用程序的简单操作步骤

    下面是C#开发Windows窗体应用程序的简单操作步骤: 1. 安装Visual Studio环境 首先需要下载安装Visual Studio,可以从官网下载Visual Studio Community版本,该版本是免费的,功能相对较完整。下载完成后按照指引安装即可。 2. 创建Windows窗体应用程序 打开Visual Studio,点击左侧菜单栏中的…

    C# 2023年6月1日
    00
  • WinForm实现鼠标拖动控件跟随效果

    为了实现WinForm中的鼠标拖动控件跟随效果,我们需要使用下述步骤: 1. 获取鼠标位置 鼠标在界面上移动时,我们需要获取其当前位置。可以通过下面的代码来获取: private void panel1_MouseMove(object sender, MouseEventArgs e) { Point point = Control.MousePositi…

    C# 2023年6月1日
    00
  • C#使用TcpListener及TcpClient开发一个简单的Chat工具实例

    C#使用TcpListener及TcpClient开发一个简单的Chat工具实例是一个比较常见的网络编程应用场景。下面我将提供一个完整的攻略,指导如何实现该工具。 1. 需求分析 首先,我们需要明确Chat工具的需求。我们需要基于TCP协议实现一个聊天工具,并保持服务器端和客户端之间的连接。服务器需要接收客户端的消息,并将消息广播给所有连接。客户端需要能够连…

    C# 2023年6月1日
    00
  • ASP.NET Core实现中间件的几种方式

    ASP.NET Core 实现中间件的几种方式 ASP.NET Core 是一个跨平台的开源框架,它提供了多种实现中间件的方式。下面是详细的攻略: 步骤1:创建 ASP.NET Core 项目 在 Visual Studio 中创建名为“MiddlewareDemo”的 Core 项目。 步骤2:使用 Use 方法添加中间件 在 Startup.cs 文件中…

    C# 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部