问题描述:问题发生在用oledb在Access数据库中运行insert语句时:
1. 该insert语句中一个字段特别长,大概有10000多个字符,如果将该字段内容单独存一个txt文件,该txt文件大小为1.5k
2. 该字段在数据库中对应的类型是 “备注”
3. 将该insert语句原样复制到access数据库上的SQL界面中运行可以顺利将数据插入数据库中,也就是说用oledb来Excute的时候才报“字段太小”错
4. C#代码:
    public int DeleteAndReturnRowNum(string SQLstr)
    {
        if (L_OleDbCon.State.ToString().Equals("Closed"))
        {
            L_OleDbCon.Open();
        }
        OleDbCommand L_OleDbCommand = new OleDbCommand(SQLstr, L_OleDbCon);
        int L_RowNum = L_OleDbCommand.ExecuteNonQuery();                    //在此报错
        return L_RowNum;
        
    }    5. 该insert语句如下:
      INSERT INTO [YS_HIS_Project_Mid_PS] VALUES ('8CD5HTBC08','N_','','2010','4','卫生部','中国医学科学院','中国医学科学院药物研究所','131001811','创新药物研究体系-新药发现关键技术共享平台的设备购置','仪器设备购置类','301','HE1G0UY5OR','NC1PM859LU_27151656',' ',' ',' ',' ',' ',' ',1,' ',' ',' ',' ','3980','3980','0','0','12','3980','3980','0','0','R1',' ',' ',' ',' ',' ','2','3','3','3','3','3','3','3','4',' ','该项目立项依据较充分,但是不同型号规格的液相色谱仪在此项目中申报过多。同意立项。','2109',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','2109',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','1871',' ','重复购置,建议分别核减140万元、55万元、36万元、60万元。','291',' ','报价偏高,建议分别核减70万元、20万元、10万元。','100',' ','型号不完整不确定,目的不明确,分别核减130万元、32万元、225万元、58万元。','445',' ','重复购置,分别核减6万元、49万元、53万元、54万元、53万元。','215',' ','在平台中使用效率不高,建议分别核减36万元、48万元、190万元、119万元、120万元。','513',' ','超高效分析型液相色谱仪、超高效液相分析系统、制备型高效液相、岛津制备型高效液相','全自动制备型高效液、EMKA无创动物生理信号遥测系统、三夹套超低温反应釜1L','高通量筛选自动化工作站、合成复杂样品制备系统、流式细胞分选仪、ABI快速实时速荧光定量PCR仪','梯度PCR仪、三夹套超低温反应釜0.3L、超高效液相色谱仪、快速高分离度液相色谱仪、气相色谱仪','恒温系统、大体积微波反应系统、400兆超导核磁共振谱仪、EnVisionTM多标记微孔板检测仪、全自动解离常数/油水分配系数测试仪','德国HUBER侵入式制冷反应系统','与项目有差距,建议核减92万元。','92',' ','精诺真活体生物发光成像','技术不成熟,参数不明确,建议核减180万元。','180',' ','液相色谱-串联四级杆-线形离子阱质谱仪','预算偏高','15',' ','微反应器系统','设备报价偏高,建议与商家进行充分沟通,减低成交价,核减20万元','20',' ','1','2109','535',' ',' ',' ',' ','NO',' 这就是那一万多字的字段,太长了贴不上来,你们可以自己去想象 ')   6. 报的错误为“字段太小而不能接受所要添加的数据的数量,试着插入或粘贴较少的数据”。7. 别问我为啥要把这么大的内容存入一个access数据库字段,不是我设计的....
请问各位大哥有什么方法能让我把这个超级长的字段存入access。
    

解决方案 »

  1.   

    Access数据库 那个字段的 长度设置为多少?
      

  2.   

    备注类型字段的长度在哪里设置?
    该sql语句可以再access上面运行只是不能通过oledb运行
      

  3.   

    备注,没有长度设置,65535个字符不在话下。有个问题问下? 你有用如下的类吗?
    private global::System.Data.DataColumn columnnId;
            
            private global::System.Data.DataColumn columnstrAccount;
            
            private global::System.Data.DataColumn columnstrName;
            
            private global::System.Data.DataColumn columnstrPassword;
            
            private global::System.Data.DataColumn columndtLastTime;
    .......
            insert into 语句 先严谨些,带上前面的字段试试
      

  4.   


    不是吧~~~我要用这方法生成sql我得写100多个啊
      

  5.   

    用参数化的形式试试,以前做过Access的论坛,别说1.5K,几万字的文章都存储进去了也没报错。
      

  6.   

    不要逼我用参数化吧,100多个字段啊~~~我还是宁愿用一个循环去拼出这个SQL也不想写100多个参数....
      

  7.   

    有道理,在Access里执行sql时,如果字段太长,可能会被截断而不会报错的,所以还是要用程序试
      

  8.   

    如果实现太长的话 可以使用ole字段 
      

  9.   

    //将C#数据以长二进制数据保存于Access数据库northwind.mdb  
      using   System;  
      using   System.IO;  
      using   System.Data;  
      using   System.Data.OleDb;  
       
      class   BLOBDemo  
      {  
      [STAThread]  
      static   void   Main(string[]   args)  
      {  
      Add("Test","2.jpg");  
      }  
       
      public   static   void   Add(string   categoryName,   string   filePath)  
      {  
       
      FileStream   fs   =   new   FileStream(filePath,   FileMode.Open,   FileAccess.Read);  
      BinaryReader   br   =   new   BinaryReader(fs);  
       
      byte   []   photo   =   br.ReadBytes((int)fs.Length);  
       
      br.Close();  
      fs.Close();  
       
      OleDbConnection   cn   =   new   OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=northwind.mdb");  
      OleDbCommand   cmd   =   new   OleDbCommand("INSERT   INTO   类别(类别名称,   图片)   VALUES   (@CategoryName,   @Picture)",   cn);  
       
      cmd.Parameters.Add("@CategoryName",   OleDbType.VarChar,15).Value   =   categoryName;  
      cmd.Parameters.Add("@Picture",   OleDbType.Binary,   photo.Length).Value   =   photo;  
       
      cn.Open();  
      cmd.ExecuteNonQuery();  
      cn.Close();  
      }  
      }  
       
      
      

  10.   

    因为楼主的具体代码没有,所以不能清楚地知道问题在啥地方。所以,这个“长度太小”,我猜测
    1、是不是因为insert语句,不严谨(文章里有'造成干扰等等),导致字段值没有对号入座?
    2、有没有可能不是实体表报错,而是虚拟DataTable相关字段长度太小,而导致?