下面是“C#窗体-数据库连接及登录功能的实现案例”的攻略:
1. 案例需求
我们需要开发一个C#窗体应用程序,要求实现以下功能:
- 与数据库建立连接
- 用户登录功能,登录成功后跳转到主页面
- 用户登录失败,展示错误提示
2. 开发步骤
2.1 数据库连接
我们可以使用ADO.NET来实现与数据库的连接。首先需要在项目中添加数据库连接:
- 打开Visual Studio,在Solution Explorer中右键单击项目名称
- 选择添加 -> 新建项 -> 数据 -> 数据库,命名为
Database1.mdf
- 双击
Database1.mdf
文件,在Server Explorer中右键单击数据库名称,选择新建查询 - 输入以下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');
```
- 单击“运行”按钮,确保查询执行没有问题。
然后就可以在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();
}
}
}
}
具体解释如下:
- 在
Form1
类中,定义了连接字符串connectionString
,这里我们使用本地数据库。 - 在
button1_Click
事件中,创建SqlConnection
对象,传入连接字符串参数,调用Open
来打开连接。 - 如果连接成功会弹出一个消息框,如果连接失败会弹出错误提示。
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();
}
}
具体解释如下:
- 在
button1_Click
事件中,获取用户名和密码。 - 构造SQL语句,使用
SELECT COUNT(*)
来查询是否存在此用户,并使用SqlCommand
对象传入参数。 - 调用
ExecuteScalar
方法来执行查询,返回结果为一个整数,此处我们直接判断结果是否大于0即可。 - 如果查询结果大于0,表示登录成功,弹出成功提示框,否则弹出失败提示框。
- 记得在
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技术站