Access 使用总结一篇 |
本文标签:Access,使用总结 1.如何 使用Access 两年前用过丝毫Access,觉得它小问题众多,就没有再用 。这次的程序是放在千兆宽网的 虚构主机上,这个 虚构主机不 支撑Sqlite,读取数据的时候是好的, 惟独往数据库里边写东西,就会报错,Some Disk I/O Error Occured 。很神秘,换了一个 虚构主机试试,没有问题 。 注明不是我程序的问题 。后来不得不换成Access 。用ADO.NET读取数据库其实都差不多,重要便是一个衔接字串的问题,还有便是一些数据库差别要 留神 。 1.1 数据库衔接串 衔接串很 容易, 惟独求指定DataSource就 可以,这里的|DataDirectory|是指的App_Data目录 。Asp.net的这种 模式 可以使我们很容易的用 绝对路径来指定数据库文件的位置 。这里的Provider采纳Oledb驱动 。 1.2 使用 在程序中 使用是很 容易的,只不过把Connection,Command之前的前缀换掉就 可以了 。举一个例子: 复制代码 代码如下: public DataTable GetAll(string num,int min,int startRecord, int pageSize) { string sql = string.Format("select Num ,minPrice ,isUsed from PhoneNumber where Num like {0}% and isUsed=0", num); if (min != 0) { sql += "and minPrice=@p1"; } using (OleDbConnection conn = new OleDbConnection(SqlHelper.ConnStr)) { conn.Open(); OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; if (min != 0) cmd.Parameters.AddWithValue("p1", min); OleDbDataAdapter adp = new OleDbDataAdapter(cmd); DataTable table = new DataTable(); adp.Fill(startRecord,pageSize,table); return table; } } 固然还要增加using:using System.Data.OleDb; using System.Data;ADO.NET的 解决 模式都是很 类似的,事实上,ADO.NET有一套以Db为前缀的Connection,Command等类,这些具体的类都是继承自DbConnection,所以看起来都是一样的 。 1.3 差别 上面提到,Access是很诡异的 。以下列举一些我遇到的: 1.3.1 user 是 要害字,假如有表名或者列名是user而没有加中括号,是会出错的 。固然, 统一地在全部的表名和列名加上中括号是一个良好的编程习惯 。 1.3.2 直接插DateTime型的数据是会报错的, 即便数据库里的字段类型 确切是Date,插入的 模式是把C#的DateTime型ToString()过后再插入 。 1.3.3 没有bool型,或者bit型,叫yesno…… 1.3.4一个命令里边不 支撑多条sql 。这个 制约也很 讨厌,每次执行一个command的时候里面不得不包括一条sql,十分不容易, 即便是 玲珑如Sqlite的数据库也没有这个 制约 。 1.3.5 参数顺序的问题. 申明的参数顺序必须要和你往command里边增加参数的申明 统一.否则极有可能什么错也不报,便是不影响 后果(update的时候, 其余时候没试过). Access真是极品数据库啊!!例如 复制代码 代码如下: string sql = "update [user] set WorkField=@p1, Company=@p3,IC=@p4,Contact=@p5,Phone=@p6,Mobile=@p7,Address=@p8,Email=@p9,Introduction=@p10 " + "where username=@p2"; cmd.CommandText = sql; cmd.Parameters.AddWithValue("p1", entity.WorkField); cmd.Parameters.AddWithValue("p3", entity.Company); cmd.Parameters.AddWithValue("p4", entity.IC); cmd.Parameters.AddWithValue("p5", entity.Contact); cmd.Parameters.AddWithValue("p6", entity.Phone); cmd.Parameters.AddWithValue("p7", entity.Mobile); cmd.Parameters.AddWithValue("p8",""); cmd.Parameters.AddWithValue("p9", string.IsNullOrEmpty(entity.Email)?" ":entity.Email); cmd.Parameters.AddWithValue("p10", string.IsNullOrEmpty(entity.Introduction)?" ":entity.Introduction); cmd.Parameters.AddWithValue("p2", entity.UserName); int i= cmd.ExecuteNonQuery();这样是 可以的,然而把 cmd.Parameters.AddWithValue("p2", entity.UserName); 提到前面去,就不行了,更新不了. 幸好在csdn上搜到有人也问这个问题,否则都不晓得怎么搞 。 2.z-index的问题 。 包括在 其余HTML元素内部的HTML元素的z-index只不过 有关于位于同一 品位的元素的z-index,对其父元素之外的元素的z-index没有影响,也便是说假如父元素的z-index很小, 比方是0,内部元素的z-index很高,1000.父元素相邻的元素的z-index是2,假如内部元素溢出去了,和相邻元素重合,那么被 遮蔽的还是内部元素 。 |