C# & MS Access - SQL 用于在应用程序开始时创建表、列和添加值
Posted
技术标签:
【中文标题】C# & MS Access - SQL 用于在应用程序开始时创建表、列和添加值【英文标题】:C# & MS Access - SQL for Create Table, Column and add values at the start of the app 【发布时间】:2021-03-28 02:39:07 【问题描述】:我正在尝试使用 C# 和 MS Access 数据库开发一个项目,该项目有一个名为 Employee
的表。我在 MS Access 上创建了所有数据库、表、属性,但我想检查数据库是否存在并检查表是否存在,还要检查属性是否存在并创建数据库、表并添加值如果没有人。
所以我创建了一个方法并尝试检查这种情况。但是,在我的代码中,有一些方法可以从数据库中获取 datagridview 的值,如果我删除我的数据库文件,我会在 datagridview 中得到错误,或者任何这种类型的都找不到数据库。我在最顶层调用了我的方法。
Table name --> Employee - columns (Name, Surname).
Second Table --> Department - column (Department_Name) This table has to come with two values; Engineering and Accountant.
调用方法进行检查:
public Form1()
checkDB();
InitializeComponent();
我检查数据库的代码:
static void checkDB()
try
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= Employee.accdb");
myConnection.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = myConnection;
myCommand.CommandText = "CREATE DATABASE IF NOT EXIST [Employee] +
CREATE TABLE IF NOT EXIST 'Employee' [ID] Counter Primary Key,
[FirstName] Text, [LastName] Text + CREATE TABLE IF NOT EXIST 'Department'
[ID] Counter Primary Key, [Department_Name] Text + insert if not exist into
Department(Department_Name) values('Engineer , Accountant ') ";
// Added new lines to read it easily
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
catch(OleDbException e)
// err.message
【问题讨论】:
欢迎@daprog,您遇到的错误是什么 您不能使用 CREATE DATABASE 在磁盘上创建 accdb 文件。该文件需要已经存在。这是基于文件的数据库和基于服务器的数据库之间的一个很大区别。不过坦率地说,我会说 Access 大多不适合作为另一个应用程序的后端——这并不是它的设计目的。如果您想为您的桌面应用程序提供一个简单的基于文件的数据库,可以考虑使用 SQLite。 (至少这样,您的应用程序的用户不需要包含 Access 的 Office 许可证)。 错误是找不到文件 - 因为没有文件我无法创建它。 @Ajay2707 我使用 Access 作为应用程序后端,我建议使用其他任何东西。有更合适的嵌入式数据库引擎,如 SQL Lite、SQL CE,或者只是磁盘上的普通文件。 @ADyson - AFAIK 使用 Access 数据库引擎并不严格要求 Office 许可证,尽管拥有可用于维护、故障排除等的 Access 副本非常方便。 【参考方案1】:Access 数据库文件可能非常适合此操作,并且不需要任何购买的许可证。
最简单的方法是在项目中包含一个空的数据库文件。然后,如果不存在,请将其复制到用户的文件夹并建立连接。
【讨论】:
【参考方案2】:Access SQL 不支持CREATE TABLE IF NOT EXISTS
,所以我们需要自己检查表是否存在:
string tableName = "team";
DataTable dt = myConnection.GetSchema("Tables", new string[] null, null, tableName );
if (dt.Rows.Count > 0)
Console.WriteLine("Table already exists.");
else
Console.WriteLine("We need to CREATE TABLE");
另外,在问题的cmets中提到,Access SQL根本不支持CREATE DATABASE
,所以我们需要使用ADOX
var myConnection = new OleDbConnection(connectionString);
try
myConnection.Open();
Console.WriteLine("Database already existed.");
catch
var cat = new ADOX.Catalog();
cat.Create(connectionString);
Console.WriteLine("Database created.");
myConnection.Open();
【讨论】:
以上是关于C# & MS Access - SQL 用于在应用程序开始时创建表、列和添加值的主要内容,如果未能解决你的问题,请参考以下文章
SQL Like 条件不会显示我的搜索数据 C# 和 Ms Access
使用 c# 将 MS Access 表数据添加到 SQL Server 表中
无法使用 c#“第 1 行的 SQL 语法错误”将数据从 Ms Access 迁移到 MySQL 工作台
有经验的 DBA 应该使用哪种 C# 操作 ms-access 的方法?
如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?