【发布时间】:2011-08-30 23:43:47
【问题描述】:
一个简单的问题:MS Access 是否可以使用 C# 而不是 VBA?我可以使用 Windows 窗体和(或)WPF 扩展 Access 应用程序吗?这样的场景有意义吗?
【问题讨论】:
标签: c# wpf winforms ms-access vba
一个简单的问题:MS Access 是否可以使用 C# 而不是 VBA?我可以使用 Windows 窗体和(或)WPF 扩展 Access 应用程序吗?这样的场景有意义吗?
【问题讨论】:
标签: c# wpf winforms ms-access vba
是的,您可以用 C# 编写一个 GUI 应用程序,然后让 MSAccess 按钮(或菜单)单击外壳到 C# 应用程序,在命令行上传递上下文信息(例如,数据库名称、要打开的表单、记录 ID、等)。
或者,您可以向您的应用程序公开一个 COM 接口,这样您就可以使用 CreateObject 创建表单或访问其他功能。
您会发现很难返回其他方式,从 C# 应用程序访问您的 MSAccess 表单和报告,但可以使用 COM 或 Windows 套接字完成。
您当然可以只在后端使用 MSAccess 数据库编写 C# GUI 应用程序,而不使用任何 MSAccess 表单(注意如果可以并且确实决定不使用 MSAccess GUI 的任何方面,那么我强烈建议完全使用不同的数据库,例如 SQL Lite 或 SQL Express)。
希望这会有所帮助。
更新回答为什么会有人这样做?有什么意义?
MsAccess 数据库规模惊人。我已经看到编写良好的 Access 应用程序遭受 4 或 5 个用户的损坏和数据完整性问题。授予网络速度和稳定性会产生影响,但真正的问题是访问(SqlExpress 应用程序在较差的网络下扩展得更好)。见Limitations of MsAccess
Access 并没有真正占有一席之地 任何重要的数据库项目。它 基本上是针对国内市场的 对于那些想要能够 存储信息供家庭使用而无需 学习高级 Excel 来做到这一点
从Inform IT 的文章中,他们花了很多时间告诉您为什么应该使用 MsAccess,他们补充说(这是我的重点)
“它不能通过网络很好地工作” 真的吗? 在这个时代 - 分布式计算是下一件大事 - 那到底有什么好处? 所以基本上,如果一台计算机上只有一个用户需要使用该应用程序,那没关系,但如果有机会你需要将它推广给多个用户,为什么要花费时间和精力来构建它在 Access 中,要推出它,您需要在后端重新构建应用程序和真正的 RDBMS。
真的,你最好不要一开始就使用 Access 当然,除非你是世界上唯一的人并且你只有一台电脑 :)
【讨论】:
嗯,
如果你不想使用 Acces 的 VBA(我猜是所有相关的对象,如表单、模块等),我猜你最好不要使用 Access。将您的数据存储在任何“真实”的数据库引擎中,无论是否免费(SQL Express、MySQL 等),并以您喜欢的语言构建您的用户界面。
【讨论】:
您可以使用 C# 来控制 Access 中的所有内容,但这似乎完全是矫枉过正。我认为 VBA 可以处理任何/所有需求,使用 VBA,您甚至可以在 Access 中创建自定义函数来完成仅使用标准内置 Access 工具无法完成的事情。同样,如果您想使用 C# 来管理 Access,是的,您当然可以这样做。
这是一个很好的链接,可以帮助您入门。
http://csharp.net-informations.com/data-providers/csharp-oledb-connection.htm
该页面底部还有许多其他链接可以帮助您处理许多其他事情。
【讨论】:
当然可以。当您集成 C# 和 Access 时,您可以做很多事情。例如,这是一种从 Access 加载 GridView 的方法。
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=your .mdb file;";
string sql = "SELECT * FROM Authors";
OleDbConnection connection = new OleDbConnection(connetionString);
OleDbDataAdapter dataadapter = new OleDbDataAdapter(sql, connection);
DataSet ds = new DataSet();
connection.Open();
dataadapter.Fill(ds, "Authors_table");
connection.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Authors_table";
}
}
}
查看下面的链接,了解更多关于 C# 和 Access 可以做什么的想法。
https://www.codeproject.com/Articles/1060352/Using-Microsoft-Access-Database-In-Csharp-ADO-NET
虽然............我不得不说,你可能永远不会离开 VBA。此外,VBA 是容易实现的目标。将 VBA 与 Access 结合使用要比尝试驯服 C# 来完成与 VBA 为您做的基本相同的事情要容易得多。此外,VBA 可能会受到更多限制,而 C# 将更加灵活,就您可以实现的目标而言。
【讨论】: