当前位置:编程学习 > C#/ASP.NET >>

C#写个文本文件导入数据库的程序

文本文件(text.txt)里有有若干道试题,格式是这样   这是其中一道,题目和选项一列,答案一列。 
"为切实加强易做图信息网络安全管理工作,规范易做图机关人民易做图使用易做图信息网,落实(  )的管理责任制,根据《中华人民共和国人民易做图法》、《中华人民共和国计算机信息系统安全保护条例》等有关法律、法规,制定本规定。A 谁主管、谁负责B 谁使用、谁负责C 谁负责、谁使用D 谁负责、谁主管", 
"AB" 
导入数据库pubs下的test表中,题目和试题对应表中的STNR和STDA这两列
... 
文本文件里很多道题目一下考进数据库中,用c#写个程序来实现这个功能,如何实现 
要求用c#写个程序 --------------------编程问答-------------------- 还没搞过呢!! --------------------编程问答-------------------- 用Bulk Insert语句
如果列的分割不明显或者容易混淆,你可对文本做与处理,
然后用Bulk Insert语句把数据倒入

Bulk Insert tablename from 'C:/A.txt' with(Fieldterminator='|',rowterminator='\r') --------------------编程问答-------------------- public class 试题
{
  private string _题目;
  private string _答案;

  public string 题目
  {
    get{ return _题目;}
    set{ _题目 = value;}
  }

  public string 答案
  {
    get {...} set {...}
  }
}

public class Run
{

  private IList<试题> 读取试题()
  {
    IList<试题> list;
    StreamReader din = new StreamReader( File.OpenRead("text.txt") ); 
    int flag = 0; 试题 my试题 = new 试题();
    do {
      str = din.ReadLine();
      flag++;

      if (str != null) {

        if(flag%2 != 0) {
          my试题.题目 = din.readLine();
        }  
        else {
          my试题.答案 = din.readLine();
          list.add(my试题.);
          my试题 = new 试题();
        }
    
      }

    } while ( str != null );

    return list;
  }

  static void main()
  {
    IList<试题> 试题集合 = 读取试题();
    for(int i=0; i<试题集合.length; i++) {
      string sql = string.Format(
        "insert into test values '{0}','{1}' ",
        试题集合[i].试题, 试题集合[i].答案
      );
      ...ExecuteNoneQuery(sql,...);
    }
  }


}
--------------------编程问答-------------------- 把你的文本做一下修改.将每个问题(包括选择内容)与正确答案都放在一行里,问题(包括选择内容)与正确答案之间用一个文本里绝对不会出现的符号(或符号集合,比如"<",或者"<>")分隔开.
用文件流读取该文本文件,读一行,就按照该特殊符号切开字符串为两部分,将取得的问题和答案,分别放到INSERT语句中的对应位置.依次类推循环文本中的每行即可.个人认为最好在表中再加个"ID"或者"题号"字段用以区别每条记录比较好,将来如果用到查找或者其他处理也比较方便.

具体代码可以参考3楼的,他写的不错,但是在取得数据上面,他所要读取的行太乱,如果文本中哪个位置不小心多留了一个空行,存入数据库的结果将会发生毁灭性的错误.而采用我说的方法,就算漏掉了某个分隔符,整行也会按顺序被存入数据库,实在不行你还可以手动修改一下.就算是有错误也并不太难挽回.
你只要将3楼的这段
      if (str != null) { 

        if(flag%2 != 0) { 
          my试题.题目 = din.readLine(); 
        }   
        else { 
          my试题.答案 = din.readLine(); 
          list.add(my试题); 
          my试题 = new 试题(); 
        } 
     
      } 
改为:
      if (str != null) { 
        my试题 = new 试题(); 
        string []str = din.readLine().split("<你的分隔符>"); 
        my试题.题目 = str[0]; 
        my试题.答案 = str[1]; 
        list.add(my试题); 
      } 
其他代码大可照搬 --------------------编程问答-------------------- jet 4.0可以直接连接逗号分割的文本文件,把你的文本文件所在的文件夹当数据库,用OpenDataSource打开,然后来个Select into语句就搞定了,看你的文本,似乎第一行不是列名,你可以先用代码把文本文件的第一行加上列名好一些
具体语法,查Access帮助的In子句以及SqlServer的OpenDataSource --------------------编程问答-------------------- text.txt第一行加上
STNR,STDA
假设text.txt在C:\Data文件夹下
SELECT * into pubs.test
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0',
  'Data Source="C:\Data";User ID=Admin;Password=;Extended Properties=text')...text#txt
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,