C# 判断access建库、建表、文件是否存在等
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建库、建表、文件是否存在等的更多相关文章
- C# 利用*.SQL文件自动建库建表等的类
/// <summary> /// 自动建库建表 /// </summary> public class OperationSqlFile { SqlConnection sq ...
- SQL Server建库-建表-建约束
----------------------------------------SQL Server建库-建表-建约束创建School数据库------------------------------ ...
- MySQL建库建表
一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...
- 【ITOO 2】.NET 动态建库建表:使用SQL字符串拼接方式
导读:在最近接手的项目(高效云平台)中,有一个需求是要当企业用户注册时,给其动态的新建一个库和表.刚开始接手的时候,是一点头绪都没有,然后查了一些资料,也问了问上一版本的师哥师姐,终于有了点头绪.目前 ...
- 使用T-sql建库建表建约束
为什么要使用sql语句建库建表? 现在假设这样一个场景,公司的项目经过测试没问题后需要在客户的实际环境中进行演示,那就需要对数据进行移植,现在问题来了:客户的数据库版本和公司开发阶段使用的数据库不兼容 ...
- 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库
导读:在上篇博客中,介绍了使用SQL字符拼接的方式,实现动态建库建表的方法.这样做虽然也能够实现效果,但是,太麻烦,而且,如果改动表结构,字段的话,会对代码修改很多.但是EF给我们提供了一种代码先行的 ...
- mysql那些事(4)建库建表编码的选择
mysql建数据库或者建表的时候会遇到选择编码的问题,以前我们都是习惯性的选择utf8,但是在mysql在5.5.3版本后加了utf8mb4的编码,utf8mb4可以存4个字节Unicode,mb4就 ...
- 判断IOS静态库(.a文件)是否支持模拟器和真机运行
判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...
- Mysql建库建用户建表等常用命令
格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输 ...
- oracle 11g 建库 建表 增 删 改 查 约束
一.建库 1.(点击左上角带绿色+号的按钮) 2.(进入这个界面,passowrd为密码.填写完后点击下面一排的Test按钮进行测试,无异常就点击Connect) 二.建表 1-1. create t ...
随机推荐
- SQL Server 查询中文字段返回为空
昨晚维护系统数据时,遇到个奇怪现象.明明数据库里有数据,查询结果就是返回为空.具体情况是这样的,查询工作日志表里关于工作描述的情况,以中文内容匹配工作描述字段,其中匹配内容里包含有空格. 尝试去掉第一 ...
- XML 解析的两种方法
申请博客有一段时间了,一直没有写些什么,今天写一下被遗忘的 xml,因为 ios 现在一般都用 JSON,但毕竟还有一部分老一些的服务器还会有 xml xml 格式的解析方式有两种 1.SAX解析: ...
- System.load()与System.loadLibrary()
Java load 和 loadlibrary方法的区别 1. 相同点: 两个方法都是用来装载dll文件,不论是JNI库文件还是非JNI库文件.本地方法在被调用时都需要通过这两发方法之一将其加载至内 ...
- h5常用标签语义
<article>定义页面独立的内容区域.例如外部来的文章. <aside>定义页面的侧边栏内容.<aside> 标签定义 <article> 标签外的 ...
- centos7 hdfs yarn spark 搭建笔记
1.搭建3台虚拟机 2.建立账户及信任关系 3.安装java wget jdk-xxx rpm -i jdk-xxx 4.添加环境变量(全部) export JAVA_HOME=/usr/java/j ...
- 2018.11.30 spoj220 Relevant Phrases of Annihilation(后缀数组+二分答案)
传送门 代码: 先用特殊字符把所有字符串连接在一起. 然后二分答案将sasasa数组分组. 讨论是否存在一个组满足组内对于每一个字符串都存在两段不相交字串满足条件. #include<bits/ ...
- Amount of Degrees(数位dp)
题目链接:传送门 思路:考虑二进制数字的情况,可以写成一个二叉树的形式,然后考虑区间[i……j]中满足的个数=[0……j]-[0……i-1]. 所以统计树高为i,中有j个1的数的个数. 对于一个二进制 ...
- pat 甲级 1086(树的遍历||建树)
思路1:可以用建树来做 由于是先序遍历,所以直接先序建树就行了. #include<iostream> #include<cstdio> #include<cstring ...
- Java的背景、影响及前景
一.背景 詹姆斯·高斯林出生于加拿大,是一位计算机编程天才.在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统,是JAVA编程语言的创始人. 高斯林生于1955年,已婚,育 ...
- mysql学习之路_外键
回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两 ...