A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 骆崇飞 中级黑马   /  2012-4-9 11:26  /  6026 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 骆崇飞 于 2012-4-11 09:52 编辑

向数据库中导入txt文件,文件内容图为

代码:
  1. if (openFl.ShowDialog() == DialogResult.OK)
  2.             {
  3.                 using (FileStream fileStream = File.OpenRead(openFl.FileName))
  4.                 {
  5.                     using (StreamReader streamReader = new StreamReader(fileStream))
  6.                     {
  7.                         string line = null;
  8.                         while ((line = streamReader.ReadLine()) != null)
  9.                         {
  10.                             string[] strs=line.Split('|');
  11.                             string title = strs[0];
  12.                             string author = strs[1];
  13.                             using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\DaoRuChu.mdf;Integrated Security=True;User Instance=True"))
  14.                             {
  15.                                 conn.Open();
  16.                                 using (SqlCommand cmd = conn.CreateCommand())
  17.                                 {
  18.                                     cmd.CommandText = "Insert into T_Users2(titleName,titleAuthor) values(@title,@author)";
  19.                                     cmd.Parameters.Add(new SqlParameter("@title", title));
  20.                                     cmd.Parameters.Add(new SqlParameter("@author", author));
  21.                                     cmd.ExecuteNonQuery();
  22.                                 }
  23.                             }
  24.                         }
  25.                     }
  26.                 }
  27.                 MessageBox.Show("导入成功!");
  28.             }
复制代码
数据库表结构:
导入结果:
导入数据为英文时可以正常显示,但中文就以乱码显示,不知道怎么加上解码代码,请同学们帮忙看看!

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

8 个回复

倒序浏览
打开你要导入的txt文档,然后菜单栏,另存为,编码选择utf -8,你再试试
如果不行,你再换种编码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报 1 0
王宗伟 发表于 2012-4-9 11:29
打开你要导入的txt文档,然后菜单栏,另存为,编码选择utf -8,你再试试
如果不行,你再换种编码 ...

嗯,这样可以:victory:,不过有没有其他的方法,不去主观的改文本编码呢?
回复 使用道具 举报
骆崇飞 发表于 2012-4-9 11:33
嗯,这样可以,不过有没有其他的方法,不去主观的改文本编码呢? ...

我找到这个,你可以参考下
快速进行Access数据库转成mysql数据库及mysql导入中文数据乱码问题的解决方案
一、Access-to-mysql pro

Access-to-mysql pro是一个可以直接将Access文件导入mysql中的软件,其基本用法参见了某人的某文如下:

这个要用到 Access-to-MySQL Pro 这个软件。网上有下载,并且有破解版的。

问题是如果直接用它来把ACCESS文件导入MYSQL会出现乱码。所以我试下以下方法,虽然麻烦点,但是还可是可行。

5.1 用Access-to-MySQL Pro来把数据库导出为*.sql 文件。

A) 运行Access-to-MySQL Pro的时候选ADVANCE MODE,下一步;
B) 选择STORE into  dump file, 就是保存为*.sql文件,下一步;
C) 选择目标MYSQL的版本,选默认值,下一步;
D) 这下要选MS ACCESS USER-LEVElL SECURITY FILE,这个文件一般在你的OFFICE安装目录下。我的是在G:\Program Files\Microsoft Office\Office\SYSTEM.MDW , 用户名填 ADMIN , 下一步;
E) 选择你要转换的ACCESS MDB文件以及保存路径,点下一步,就可以生成.sql 文件了。我生成的是C:\test.sql。

5.2 把刚才生成的文件转成UTF-8格式。 用记事本打开这个文件,选另存为,编码选UTF-8,覆盖保存就OK了。

5.3 在MYSQL导入该文件

我不在phpMyAdmin导入文件是因为phpMyAdmin默认只能导入17M的文件。懒得改相应的设置,MYSQL命令行方便些。

进入DOS窗口,转到MYSQL安装目录的BIN子目录下。我这里是G:\Program Files\xapp\xampp\mysql\bin.

A) mysql -uroot -p
  password:这里输入密码
B) CREATE DATABASE hewang;
C) use hewang;
E) source c:\test.sql;

有可能会出现错误提示音,不管他,等它再次出现提示符的时候,导入成功。我用这种方法导入一个50M的文件没有问题,只是提示音响了十分钟。

可以在phpMyAdmin下查看数据是否正确,如果没有乱码就OK了。
二、关于数据导入mysql时的乱码的解决方案

当然上文是基于php下的乱码解决方案,我在MySQL Command Line Client下使用>source c:\test.sql时导入有中文字串的字段值的时候,从SQL Manager中查看记录都是乱码。我的解决方案如下:

由Access-to-mysql生成的sql文件中有类似如下文本内容:
CREATE TABLE `userinfo` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50),
      'pwd' VARCHAR(20),
   PRIMARY KEY (`id`)
) TYPE=InnoDB;
注意红色的文本,修改成如下:
CREATE TABLE `userinfo` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50),
      'pwd' VARCHAR(20),
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
接下来,还要在文件中的LOCK TABLES `userinfo` WRITE;后面,INSERT INTO `userinfo`....文本的前面增加如下一行,如下:
LOCK TABLES `userinfo` WRITE;
SET NAMES 'gb2312';
INSERT INTO `userinfo` VALUES
这样修改这个文件以后,还要将它以ANSI编码重新保存。这样操作以后,在MySQL Command Line Client中使用>source test.sql后导入mysql数据的字串都是正确的了。并且,所有文本相关的编码也都是gb2312的编码。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
在using (StreamReader streamReader = new StreamReader(fileStream,Encoding.Default))这里加个参数,也就是指定个字符编码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
不是可以在SQL 添加中文字符串前加'N'吗?
你试试

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
StreamReader streamReader = new StreamReader(fileStream,Encoding.Default))加上这个参数就可以了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这个老师将的视屏中讲过两三遍吧!!  那都是编码方式的问题。如果不对的话可以自己修改的啊!  我觉得最好的是,你在读取流文件的时候,把编码方式设置成Encoding.Default(是系统默认)的! 基本上就没有问题了,如果还是不对,那就把你的TXT文件换一个编码方式就行了……

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
pray 高级黑马 2014-4-26 07:38:01
9#
看完楼主的帖子,我的心情竟是久久不能平复,正如老子所云:大音希声,大象希形。我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感。面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次的翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音穿梁,三日不绝的感受。楼主,你写得实在是太好了。我唯一能做的,就只有把这个帖子顶上去这件事了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马