1.创建数据库

2.判断表是否存在

3.创建表

1.    #region access数据库操作 之 创建数据库
        private void creatMDB(string dbName)
        {
            ADOX.CatalogClass cat = new ADOX.CatalogClass();
            cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";");
            //ADOX.Catalog cat = new Catalog();
            //cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";Jet OLEDB:Engine Type=5");s
        }
        #endregion

2.     #region access数据库操作 之 判断数据库中是否存在某表
        public bool GetTables(OleDbConnection conn)
        {
            int result = 0;
            DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                                                             new object[] {null, null, null, "TABLE"});

if (schemaTable != null)
            {

for (Int32 row = 0; row < schemaTable.Rows.Count; row++)
                {
                    string col_name = schemaTable.Rows[row]["TABLE_NAME"].ToString();
                    if (col_name == "MyChooseStock")
                    {
                        result++;
                    }
                }
            }
            if (result == 0)
                return false;
            return true;
        }
        #endregion

3.     #region access数据库操作 之 创建表
        //新建mdb的表,C#操作Access之创建表
        //mdbHead是一个ArrayList,存储的是table表中的具体列名。
        private void CreateMDBTable(string mdbPath, string tableName, ArrayList mdbHead)
        {
            ADOX.CatalogClass cat = new ADOX.CatalogClass();
            string sAccessConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;  Data Source=" + mdbPath;
            connection = new OleDbConnection(sAccessConnection);
            connection.Open();
             ADODB.Connection cn = new ADODB.Connection();
            cn.Open(sAccessConnection, null, null, -1);

cat.ActiveConnection = cn;
            //新建一个表,C#操作Access之创建表
            ADOX.TableClass tbl = new ADOX.TableClass();
            tbl.ParentCatalog = cat;//目录
            tbl.Name = tableName;

//增加一个自动增长的字段
            ADOX.ColumnClass col = new ADOX.ColumnClass();
            col.ParentCatalog = cat;
            col.Type = ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型
            col.Name = "id";
            col.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
            col.Properties["AutoIncrement"].Value = true;
            tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0);

// 增加一个文本字段
            int size = mdbHead.Count;
            for (int i = 0; i < size; i++)
            {
                //增加一个文本字段      
                ADOX.ColumnClass col2 = new ADOX.ColumnClass();
                col2.ParentCatalog = cat;
                col2.Name = mdbHead[i].ToString(); //列的名称   
                col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
                tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarWChar, 500);
            }
            //设置主键  
            tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "");

cat.Tables.Append(tbl); //这句把表加入数据库(非常重要)  ,C#操作Access之创建表
            tbl = null;
            cat = null;
            connection.Close();
        }
        #endregion

4.

using System.Data;
using System.Data.OleDb;

using ADOX; //需添加 Microsoft ADO Ext. 6.0 ***Security

protected override void buttonOk_Click(object sender, EventArgs e)
        {

private OleDbConnection connection;

private OleDbDataAdapter dataAdapter;

string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
                        if (Directory.Exists(systemPath + "\\data") == false)//如果不存在就创建file文件夹
                        {
                            Directory.CreateDirectory(systemPath + "\\data");
                        }
                        string favoriteStockMDB = systemPath + "\\data\\Data.mdb";
                        if (!File.Exists(favoriteStockMDB)) creatMDB(favoriteStockMDB);//判断是否存在数据库,不存在,则创建
                        connection =
                            new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + favoriteStockMDB);
                        connection.Open();

if (!GetTables(connection))
                        {
                            string table_name = "MyChooseStock";
                            ArrayList col_names = new ArrayList();
                            col_names.Add("StockCode");
                            CreateMDBTable(favoriteStockMDB, table_name, col_names);
                            connection.Open();
                        }
                        dataAdapter = new OleDbDataAdapter("select  * from MyChooseStock", connection);
                        DataSet dataSetSelect = new DataSet();
                        dataAdapter.Fill(dataSetSelect, "sel");
                        DataTable dataTable = dataSetSelect.Tables["sel"];
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            listSelect.Add(dataTable.Rows[i][1].ToString());
                        }
                        OleDbCommand insertCommand = connection.CreateCommand();
                        insertCommand.CommandText = "insert into MyChooseStock(StockCode) values (?)";
                        insertCommand.Parameters.Add("StockCode", OleDbType.VarChar, 1024);
                        insertCommand.Prepare();
                        insertCommand.Parameters[0].Value = list[0];
                        Int32 row = insertCommand.ExecuteNonQuery();
                        if (row != 0)
                        {
                            MessageBoxHelper.ShowInfo("收藏成功!");
                        }
                        else
                        {
                            MessageBoxHelper.ShowInfo("收藏失败!");
                        }
                        connection.Close();

}

C# 判断access建库、建表、文件是否存在等的更多相关文章

  1. C# 利用*.SQL文件自动建库建表等的类

    /// <summary> /// 自动建库建表 /// </summary> public class OperationSqlFile { SqlConnection sq ...

  2. SQL Server建库-建表-建约束

    ----------------------------------------SQL Server建库-建表-建约束创建School数据库------------------------------ ...

  3. MySQL建库建表

    一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...

  4. 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式

    导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...

  5. 使用T-sql建库建表建约束

    为什么要使用sql语句建库建表? 现在假设这样一个场景,公司的项目经过测试没问题后需要在客户的实际环境中进行演示,那就需要对数据进行移植,现在问题来了:客户的数据库版本和公司开发阶段使用的数据库不兼容 ...

  6. 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库

    导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...

  7. mysql那些事(4)建库建表编码的选择

    mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就 ...

  8. 判断IOS静态库(.a文件)是否支持模拟器和真机运行

    判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...

  9. Mysql建库建用户建表等常用命令

    格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输 ...

  10. oracle 11g 建库 建表 增 删 改 查 约束

    一.建库 1.(点击左上角带绿色+号的按钮) 2.(进入这个界面,passowrd为密码.填写完后点击下面一排的Test按钮进行测试,无异常就点击Connect) 二.建表 1-1. create t ...

随机推荐

  1. 摹客iDoc201901-2新功能点评

    2019才刚刚开始,摹客团队就已经蓄势待发.马不停蹄地给大家带来了又一份惊喜.实话说,这次小摹都忍不住要点个赞!下面就赶紧带大家看看iDoc又更新了哪些新功能: 1.标注和评论融合.协作更高效 iDo ...

  2. keepalived+nginx+tomcat+redis集群环境部署

    1.所需软件.jar包.配置文件下载:http://pan.baidu.com/s/1dFgntst 2.环境说明: centos6.5  64位 主节点:192.168.40.121 副节点:192 ...

  3. PHP大数据处理要注意的

    1. 传递值使用引用传递 $a = get_large_array(); pass_to_function(&$a); 这样是传递变量的引用而不是拷贝 2.将大数据存在类的变量中 class ...

  4. spring boot所有配置

    转载 http://blog.csdn.net/lpfsuperman/article/details/78287265 # 日志配置# 日志配置文件的位置. 例如对于Logback的`classpa ...

  5. NOIP2017普及组T1题解

    神奇的链接 上面时题目. 其实不得不说,这一题很水,比2015年的第一题水多了. 直接按题目套公式就行了,当然你也可以像我一样化简一下. 直接看代码: #include<cstdio> # ...

  6. Cantor表(NOIP1999)

    题目链接:Cantor表 这道题很水,但有的人没看懂题意,这不怪大家,怪题目没说清楚. 给张图: 看到这,你应该明白题目意思了. 先看看有什么规律. 我把这个数列写出来: 1/1,1/2,2/1,3/ ...

  7. Rigidbody.Is Kinematic和碰撞体

    Rigidbody组件拥有一个Is Kinematic的属性,该属性可以将其从引擎的控制中移除,从而可以用脚本控制GO的运动.注意:尽量不要使用脚本控制该属性的开关. Colliders(碰撞器) C ...

  8. 初识python函数

    一.函数 1.什么是函数 函数是对功能或者动作的封装 2.函数的语法和定义 def 函数名(): 函数体 调用: 函数名() 3.关于函数的返回值 return :  返回 1.当程序没写过retur ...

  9. 2018.11.14 uoj#34. 多项式乘法(fft)

    传送门 NOIpNOIpNOIp爆炸不能阻止我搞oioioi的决心 信息技术课进行一点康复训练. fftfftfft板题. 代码: #include<bits/stdc++.h> usin ...

  10. 2018.11.03 NOIP模拟 地球发动机(线性dp)

    传送门 考试5分钟写完. 如果没这题今天多半爆零了(汗 直接二分出合法的转移范围. 然后用后面的状态更新前面的就可以了. 代码