打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel做数据库时,删除数据时提示: “该 ISAM 不支持在链接表中删除数据”

Excel≈数据库

本节标题的意思就是我们可以用excel作为数据库使用。为什么是约等于呢?是因为在使用的过程中不能进行删除操作。删除时就会提示 "该 ISAM 不支持在链接表中删除数据"。其他的查询和更新我们都可以进行操作。

既然是excel,那么和数据库也是有区别的:

1、 一次删除一整条记录,否则将出现以下错误信息:
Deleting data in a linked table is not supported by this ISAM.
只能通过分别清空各个字段的内容来删除一条记录。
2、 删除包含 Excel 公式的单元格中的值,否则将出现以下错误信息:
Operation is not allowed in this context.
3、 虽然电子表格中已被删除的数据原来所在的行现在是空行,但无法将其删除,而且记录集将继续显示对应于这些空行的空记录。
针对这个问题,通常简单的做法就是清空字段的值,类似这样的写法:UPDATE sheet1$ SET NAME = NULL, DeptName= NULL WHERE DeptId = 1;当然,你要知道的是,这一行并没有真正删除掉,所以通常在select的时候要进行一定的筛选,例如:SELECT * FROM sheet1$ WHERE DeptId IS NOT NULL;

连接字符串

使用Excel作为数据库时要注意连接字符串的设置,具体设置如下:

  1. private static readonly string Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "data source='Security.xls';Extended Properties='Excel 8.0; HDR=YES; IMEX=2'";  

字符串的解释:

provider:不用解释了吧,驱动提供方式。

data source:数据源,这里就是xls文件的路径

 HDR ( HeaDer Row ):
    若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称

    若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称

IMEX ( IMport EXport mode ):

     IMEX 有三种模式,各自引起的读写行为也不同,容後再述:
     0 is Export mode
     1 is Import mode
     2 is Linked mode (full update capabilities)
    

      我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:

      当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

      当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

      当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

一些其他字符串:

  1. string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" +Path+ ";Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件     
  2. string strCon = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Path + ";Extended Properties='Excel 12.0; HDR=No; IMEX=0'"; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)     

特别注意:必须注意连接字符串的正确写入,否则会报“不能连接数据库”的错误。

Oledb版本的一个sqlhelper

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Data;  
  5. using System.Data.OleDb;  
  6.   
  7.   
  8. public class SqlHelper  
  9. {  
  10.     /// <summary>  
  11.     /// 从配置文件中读取连接数据库的字符串  
  12.     /// </summary>  
  13.         private static readonly string Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "data source='Security.xls';Extended Properties='Excel 8.0; HDR=YES; IMEX=2'";  
  14.       
  15.     
  16.     /// <summary>  
  17.     /// 定义连接数据库的变量  
  18.     /// </summary>  
  19.     OleDbConnection SqlConn;  
  20.     /// <summary>  
  21.     /// 定义操作数据库所需要的变量  
  22.     /// </summary>  
  23.     OleDbCommand SqlComm;  
  24.     /// <summary>  
  25.     /// 定义选择数据库中内容的对象  
  26.     /// </summary>  
  27.     OleDbDataReader DataReader;  
  28.     /// <summary>  
  29.     /// 定义数据表对象  
  30.     /// </summary>  
  31.     DataTable Dt;  
  32.   
  33.   
  34.   
  35.     public SqlHelper()  
  36.     {  
  37.   
  38.     }  
  39.   
  40.     ~SqlHelper()  
  41.     {  
  42.   
  43.     }  
  44.   
  45.     public virtual void Dispose()  
  46.     {  
  47.   
  48.     }  
  49.   
  50.   
  51.     /// <summary>  
  52.     /// 打开数据库连接  
  53.     /// </summary>  
  54.     public void Open()  
  55.     {  
  56.         SqlConn = new OleDbConnection();  
  57.         SqlConn.ConnectionString = Conn;  
  58.         SqlConn.Open();  
  59.     }  
  60.   
  61.     /// <summary>  
  62.     /// 关闭数据库连接  
  63.     /// </summary>  
  64.     public void Close()  
  65.     {  
  66.         SqlConn.Close();  
  67.   
  68.     }  
  69.   
  70.     /// <summary>  
  71.     /// 执行不带参数的增加、删除、或修改  
  72.     /// </summary>  
  73.     /// <param name="cmdtext">sql语句字符串</param>  
  74.     /// <param name="cmdtype">要执行的命令类型</param>  
  75.     public bool ExecAddUpdateDelete(string Cmdtext, CommandType Cmdtype)  
  76.     {  
  77.         Open();  
  78.   
  79.         //对SqlCommand对象进行实例化  
  80.         SqlComm = new OleDbCommand(Cmdtext, SqlConn);  
  81.         SqlComm.CommandType = Cmdtype;  
  82.   
  83.     
  84.         //执行命令  
  85.         SqlComm.ExecuteNonQuery();  
  86.   
  87.         Close();  
  88.         return true;  
  89.     }  
  90.   
  91.     /// <summary>  
  92.     /// 执行带参数的增加、删除、修改  
  93.     /// </summary>  
  94.     /// <param name="cmdtext">sql语句字符串</param>  
  95.     /// <param name="cmdtype">要执行的命令类型</param>  
  96.     /// <param name="Paras">所有参数</param>  
  97.     public bool ExecAddUpdateDelete(string Cmdtext, CommandType Cmdtype, OleDbParameter[] Paras)  
  98.     {  
  99.         Open();  
  100.   
  101.   
  102.         //对SqlCommand对象进行初始化  
  103.         SqlComm = new OleDbCommand(Cmdtext, SqlConn);  
  104.         SqlComm.CommandType = Cmdtype;  
  105.         //对参数赋值  
  106.         SqlComm.Parameters.AddRange(Paras);  
  107.   
  108.         //执行命令  
  109.         SqlComm.ExecuteNonQuery();  
  110.   
  111.         Close();  
  112.         return true;  
  113.   
  114.   
  115.     }  
  116.   
  117.     /// <summary>  
  118.     /// 执行带参数的查询,返回数据表  
  119.     /// </summary>  
  120.     /// <param name="cmdtext">存储过程的名称</param>  
  121.     /// <param name="cmdtype">要执行的命令类型</param>  
  122.     /// <param name="Paras">所有参数</param>  
  123.     public DataTable ExecSelect(string Cmdtext, CommandType Cmdtype, OleDbParameter[] Paras)  
  124.     {  
  125.         Open();  
  126.   
  127.         //对SqlCommand对象进行实例化  
  128.         SqlComm = new OleDbCommand(Cmdtext, SqlConn);  
  129.         SqlComm.CommandType = Cmdtype;  
  130.         //给参数赋值  
  131.         SqlComm.Parameters.AddRange(Paras);  
  132.   
  133.         //返回DataReader对象  
  134.         DataReader = SqlComm.ExecuteReader();  
  135.         Dt = new DataTable();  
  136.         //返回DataTable对象  
  137.         Dt.Load(DataReader);  
  138.   
  139.         //返回数据表  
  140.         Close();  
  141.         return Dt;  
  142.     }  
  143.   
  144.     /// <summary>  
  145.     /// 执行不带参数的选择,返回数据表  
  146.     /// </summary>  
  147.     /// <param name="cmdtext">存储过程的名称</param>  
  148.     /// <param name="cmdtype">要执行的命令类型</param>  
  149.     public DataTable ExecSelect(string Cmdtext, CommandType Cmdtype)  
  150.     {  
  151.         Open();  
  152.         //对SqlCommand对象进行实例化  
  153.         SqlComm = new OleDbCommand(Cmdtext, SqlConn);  
  154.         SqlComm.CommandType = Cmdtype;  
  155.   
  156.         //返回DataReader对象  
  157.         DataReader = SqlComm.ExecuteReader();  
  158.         //返回DataTable对象  
  159.         Dt = new DataTable();  
  160.         Dt.Load(DataReader);  
  161.   
  162.         //返回数据表  
  163.         Close();  
  164.         return Dt;  
  165.     }  
  166.   
  167. }  


总结

通过本文我们要知道Excel可以作为简单的数据库使用,但是其和数据库的根本区别也要知道。

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
微软提供的数据访问组件SqlHelper
vs2010实际项目ASP.NET小试练_完整页绿色软件资讯
浅谈PetShop之使用存储过程与PLSQL批量处理(附案例)
VB.net版本的数据库访问类DataBaseAccess
Excel VBA ADO SQL入门教程021:ADO常用连接字符串
.Net读取xlsx文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服