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日

相关文章

  • C#使用async和await实现异步编程

    下面是C#使用async和await实现异步编程的完整攻略。 什么是异步编程? 异步编程是指同时执行多个操作,而且不用等待当前操作完成再去执行下一个操作的编程方式。使用异步编程可以在所有操作都完成之前充分利用资源,提高性能和效率。 C#异步编程的实现方式 在C#中,异步编程可以使用async和await关键字实现。async关键字用于修饰方法,表明该方法是异…

    C# 2023年5月15日
    00
  • 深入c# GDI+简单绘图的具体操作步骤(一)

    以下是针对“深入c# GDI+简单绘图的具体操作步骤(一)”的完整攻略。 操作步骤 步骤一:创建画布 首先,我们需要创建一个画布。在C#中,可以通过使用System.Drawing命名空间中的Graphics类来创建画布。 //创建画布 Graphics g = e.Graphics; 步骤二:设置画笔 接下来,我们需要设置画笔。在C#中,可以通过使用Sys…

    C# 2023年6月6日
    00
  • C#五类运算符使用表达式树进行操作

    标题:使用表达式树进行C#五类运算符操作的完整攻略 什么是表达式树? 表达式树是将C#语言中的表达式转换为对象模型,可以在运行时分析表达式并进行编译。表达式树不仅可以描述C#语言中的表达式,还可以描述Lambda表达式和LINQ查询表达式。 五类运算符 C#语言中有五类运算符:算术运算符、关系运算符、逻辑运算符、赋值运算符和位运算符。 使用表达式树操作这些运…

    C# 2023年5月15日
    00
  • .NET CPU爆高事故事故分析某供应链WEB网站

    .NET CPU爆高事故分析 最近,某供应链WEB网站出现了CPU爆高的问题,导致网站响应变慢,甚至无法访问。在本文中,我们将详细讲解如何分析和解决这个问题。 问题描述 某供应链WEB网站出现了CPU爆高的问题,导致网站响应变慢,甚至无法访问。经过初步分析,发现问题出现在.NET应用程序中。 分析步骤 步骤一:使用性能分析工具 使用性能分析工具可以帮助我们找…

    C# 2023年5月16日
    00
  • C#实现文件上传下载Excel文档示例代码

    下面我将详细讲解C#实现文件上传下载Excel文档的示例代码攻略。 1. 实现文件上传 1.1 编写HTML表单 首先,我们需要在前端编写一个HTML表单,让用户选择要上传的文件和提交表单。 <form action="UploadFileHandler.ashx" enctype="multipart/form-data…

    C# 2023年5月15日
    00
  • C# 参考之访问关键字:base、this

    C# 参考之访问关键字:base、this 在C#开发中,我们经常需要使用到 base 和 this 这两个关键词来访问父类和当前类的成员。本文将深入介绍 base 和 this 关键字的用法和注意事项。 访问父类成员 base 关键字用于访问父类中定义的成员,包括字段,方法和属性。在子类中,如果存在一个和父类同名的成员,我们可以使用 base 关键字来调用…

    C# 2023年5月31日
    00
  • C# WebClient类用法实例

    C# WebClient类用法实例 简介 WebClient类是C#中提供的常用的网络编程类。它提供了以编程方式访问Web服务器资源的功能。利用WebClient对象,可以在应用程序中实现与HTTP,FTP和其他Internet协议的通信。 使用WebClient类下载文件 下面是一个示例,演示了如何使用WebClient类下载一个文件到本地。 using …

    C# 2023年6月1日
    00
  • C# DataTable.Select()根据条件筛选数据问题

    C# DataTable类是一个非常强大的数据容器,通过Select方法可以选择满足筛选条件的数据行,并且将这些数据行返回到一个新的DataTable对象中。下面是使用DataTable.Select()方法根据条件筛选数据的完整攻略: 1. 准备数据表 首先,我们需要准备一个数据表,作为我们示例代码中的数据来源。可以使用如下代码创建一个名为”Student…

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