c# - 如何在我的整个应用程序中使用数据库连接类
问题描述
我为 MS Access 数据库连接创建了一个类。它适用于我的 Winforms 应用程序中的大多数表单。但是,我有一个表单,用户可以在其中添加、编辑或删除数据库中的信息。我已经使用字符串构造了该部分,但是当我删除之前在那里的长数据库连接字符串并将其替换为我创建的类时,它会引发异常。
我尝试通过删除字符串来更改代码,但我想使用字符串方法。
这是我用于删除按钮单击事件的代码
string con = (@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\folder\Desktop\ApplicationFolder\AppName\bin\Debug\DataBase\DatabaseName.accdb");
string Query = "delete from Employees2 where EmployeeName = '" +
this.txtAdminFEmployee.Text + "' ; ";
OleDbConnection ConnectionString = new OleDbConnection(con);
OleDbCommand command = new OleDbCommand(Query, ConnectionString);
OleDbDataReader reader;
try
{
ConnectionString.Open();
reader = command.ExecuteReader();
DialogResult result = MessageBox.Show("Employee Deleted Successfully",
"Information",
MessageBoxButtons.OK, MessageBoxIcon.Information);
while (reader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show("Error " + ex);
ConnectionString.Close();
这是我创建的数据库类
using System.Data.OleDb;
namespace AppName
{
class OledbConnect
{
public OleDbConnection con;
public void Connection()
{
con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DatabaseName.accdb");
}
}
}
我需要知道如何在该字符串中使用数据库类。我尝试了不同的方法,但没有任何效果。我还是 c# 的新手,谷歌并没有真正返回我可以使用的任何东西。谢谢
解决方案
您的初始代码有效,但在变量命名中很明显混淆。
string con = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =C:\Users\folder\Desktop\ApplicationFolder\AppName\bin\Debug\DataBase\DatabaseName.accdb";
(我从声明中去掉了不需要的括号;它只是一个字符串。)
称该字符串为“con”有点令人困惑。我将其称为“connectionString”,或者简称为“cs”。
OleDbConnection ConnectionString = new OleDbConnection(con);
OleDbCommand command = new OleDbCommand(Query, ConnectionString);
好的,所以您正确地创建了一个 OleDbConnection,将连接字符串 (con) 传递给它的构造函数。这很好。但是您混淆地称它为 ConnectionString。这不是连接字符串;它是连接,然后您的代码正确使用它。
所以这行得通。由于变量的错误命名而使人类阅读感到困惑,但编译器并不关心它们的名字是什么 - 它非常清楚 ConectionString 是一个 OleDbConnection 并且不会感觉到我做的任何认知失调我看着它。
如果您按照我的建议重命名原始代码中的变量,然后将该代码复制到您的类中(顺便说一句,我只是将其称为 DbConnection;它的当前名称非常接近另一个类名,这也可能令人困惑) ,注意每个语句的作用以及每个变量代表的内容,那么您应该一切顺利。
推荐阅读
- ansible - 无法解析库存目录
- arrays - 范围对象可以容纳的单元格数量是否有限制?
- c# - 使用 ByAndroidUIAutomator 定位器时,显式等待不适用于 AppiumWebElement
- pyarrow - 通过 C++ API 将 Python 序列转换为箭头数组
- oracle - oracle如何在另一个表中加入聚合数据
- ruby - Ruby Watir Selenium WebDriver 被贬低的警告
- javascript - 非矩形对象的单击区域
- python - 如何使用 boto3 让每个 cognito 用户与他们的组一起使用
- sql - 有没有办法通过索引优化将 jsonb 值转换为 Posgresql 中的双精度?
- php - 如何防止在php中页面加载/刷新时提交表单?