我想向SqlServer的一个表里添加长文本,刚开始用的方法是:
...
strCmd="select * from tableText"
SqlDataAdapter adapter=new SqlDataAdapter(strCmd);
DataSet ds=new DataSet();
adapter.Fill(ds,tableName);
adapter.Update(ds,tableName);
....但是当数据库中的记录条数大于4500条时,数据库访问速度明显变慢,我的目的仅仅是将一些长文本写入到数据库中。请问这种方法为什么会导致如此结果?如果用SqlCommand.ExcuteNonQuery(string strCmd)方法可行吗,以及如何表示strCmd?若此法不行,是否有更好的解决办法?请高手看着指点吧,有一说一,高分重谢。

解决方案 »

  1.   

    用SqlCommand执行一条SQL语句比较好,因为你并不想得到其他数据INSERT INTO tableText (emp_no, fname, lname, officeno)
       VALUES (3022, "John", "Smith", 2101)类似这样
      

  2.   

    strCmd="select * from tableText"
    SqlDataAdapter adapter=new SqlDataAdapter(strCmd);
    DataSet ds=new DataSet();
    adapter.Fill(ds,tableName);
    adapter.Update(ds,tableName);这种工作机制是让ADO.net 帮你转换成 Insert ... 语句进而执行
    所以效率不高
    还不如自己写Insert 直接操作不知道 如果写个存储过程 每次插入数据 把插入值传给存储过程,这样是不是效率会高一点?还有 我最近也遇到这样的问题 每次插入条数超多 20万行以上 
    需要等很久 有没有什么解决办法?谢
      

  3.   

    就直接写insert语句然后不用adapter.Fill(ds,tableName);和adapter.Update(ds,tableName);,直接用SqlCommand.ExcuteNonQuery(),很快的。
      

  4.   

    为了防止出错或溢出,这样写长文本的一定要放在
    try
    {
    }
    catch
    {
    }
    finally
    {
    }
    结构化错误处理的try块中。
      

  5.   

    我也想直接用insert语句,insert语句要求被插入的字符串没有特殊字符,而我要插入的文本里面什么特殊字符都可能出现,包括引号,"date","Select"等等,这可怎么办?呵呵,好像try{}catch{}也不是合适的解决办法。
      

  6.   

    直接用sql insert into插入好了
    特殊字符用\转转义字符试试
      

  7.   

    问题,差不多解决了,其实很简单,将文本中所有的'替换成'',然后用insert语句。感谢oyljerry