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# 和 MS Access 之间的数据类型不匹配?

无法使用 c#“第 1 行的 SQL 语法错误”将数据从 Ms Access 迁移到 MySQL 工作台

有经验的 DBA 应该使用哪种 C# 操作 ms-access 的方法?

如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?