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#表达式树讲解

    C# 表达式树讲解 在 C# 中,表达式树(Expression Tree)是一个类似于代码的树形数据结构,可以表示出一个语法树、一个 lambda 表达式、一个 LINQ 查询等等。 表达式树是由表达式节点构成的,每个节点代表一个表达式或语句。 表达式树的语法 表达式树和 C# 中的 lambda 表达式比较类似,都是由参数、箭头符号和表达式组成。例如以下…

    C# 2023年6月1日
    00
  • Unity 点击UI与点击屏幕冲突的解决方案

    下面我会详细讲解“Unity 点击UI与点击屏幕冲突的解决方案”的完整攻略。 问题描述 在使用Unity开发UI界面时,常常会遇到这样的问题:当点击UI控件时,同时也会触发点击屏幕的事件,导致产生冲突或者误操作。这个问题需要解决,否则会影响用户的使用体验。 解决方案 在Unity中,我们可以通过添加代码来解决点击UI与点击屏幕冲突的问题。解决方案大致分为以下…

    C# 2023年6月3日
    00
  • C#实现字符串与图片的Base64编码转换操作示例

    下面为你详细讲解“C#实现字符串与图片的Base64编码转换操作示例”的完整攻略: 什么是Base64编码? Base64编码是一种用于将二进制数据转换成文本字符串的编码方式。在Base64编码中,每3个字节的数据由4个字符表示,所以编码后的文本字符串会比原始的二进制数据字符串长1/3。 C#实现字符串与图片的Base64编码转换方法 将字符串转换为Base…

    C# 2023年6月8日
    00
  • C#基础之委托用法实例教程

    下面就是关于 “C#基础之委托用法实例教程” 的完整攻略: 1. 什么是委托? 委托(Delegate)是一种类,它用于定义方法的类型,一个委托类可以搭载一个或多个方法。委托可以看作是C++中函数指针的升级版。C#编译器可以将一个委托引用的方法看做一个普通的方法,所以委托也可以称为类型安全的回调。 2. 委托的定义和使用 委托的定义 定义委托的语法格式如下:…

    C# 2023年6月6日
    00
  • .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用

    下面我就来详细讲解“.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用”的完整攻略: Winform程序运行结构图 在Winform程序的运行结构图中,分为用户界面层、业务逻辑层和数据访问层三层。用户界面层是Winform界面,它通过调用业务逻辑层的方法实现需要的功能。业务逻辑层是Winform程序中的核心…

    C# 2023年6月7日
    00
  • C#递归读取XML菜单数据的方法

    在C#中,我们可以使用递归方法来读取XML菜单数据。递归方法是一种自我调用的方法,它可以在方法内部调用自身,以便处理嵌套的数据结构。本文将介绍如何使用递归方法来读取XML菜单数据,并提供两个示例来演示如何使用这些技术。 读取XML菜单数据的方法 以下是读取XML菜单数据的步骤: 创建一个XmlDocument对象,用于加载XML文件。 使用XmlDocume…

    C# 2023年5月15日
    00
  • C#传递参数到线程的方法汇总

    给您详细讲解一下 C# 传递参数到线程的方法汇总: 1. 传递参数的方法总结 C# 中传递参数到线程基本上有以下 4 种方法: 使用 Thread 类的 ParameterizedThreadStart 委托来传递单一参数,主要是使用 object 类型作为参数,需要在线程内部进行一些转换,不是很方便。 使用 Thread 类的 ThreadStart 委托…

    C# 2023年6月7日
    00
  • C#实现强制关闭当前程序进程

    下面我将详细讲解一下“C#实现强制关闭当前程序进程”的完整攻略。 方案一:使用Process.Kill方法 可以使用Process.Kill()方法来强制关闭指定进程。需要先获取要关闭的进程的Process实例。示例代码如下: Process curProcess = Process.GetCurrentProcess(); // 获取当前进程 curPro…

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