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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 9881008杜鹏 黑马帝   /  2011-11-17 04:19  /  1864 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 9881008杜鹏 于 2011-11-17 04:21 编辑

在把数据导入数据库时,中文字符出现了乱码,插入语句(如):insert into promary values(1,N'北京市'),中文字符钱已经加了N,在设置数据库的字段类型是:nvarchar(50)。导入数据的代码如下:
FolderBrowserDialog dlg = new FolderBrowserDialog();//弹出目录对话框控件引用的类
            if (dlg.ShowDialog() != DialogResult.OK)
            { return; }
            string path = dlg.SelectedPath;
            String connString = ConfigurationManager.ConnectionStrings["Connstring"].ConnectionString;//在“添加--新建项--应用程序配置文件”,添加一个配置文件,然后在该文件中加入以下代码:
            //<connectionStrings ><add name ="Connstring" connectionString ="Data Source =.\SQLEXPRESS;AttachDBFilename = |DataDirectory|\Database1.mdf;Integrated Security= true ;User Instance=true"></add></connectionStrings>;
            //最后添加“引用”在.net类库里引用:“System.configuration”
            string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories);//获取文件的文件名。SearchOption.AllDirectories获取该文件夹中的所有文件(包括子文件夹的内容);
            //而SearchOption.TopDirectoryOnly只获取该文件夹下地文件(不包含子文件夹)
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "insert Phone(Number,Address)values(@number,@address)";
                    foreach (string file in files)
                    {
                        string 运营商信息 = Path.GetFileNameWithoutExtension(file);
                        string[] lines = File.ReadAllLines(file );//不用StreamReader是因为文件很小一次性加载不占多少内存
                        //StreamReader reader = new StreamReader(file);
                        //string lines = null;
                        // while ((lines = reader.ReadLine())!=null)
                        foreach (string line in lines)
                        {
                            // MessageBox.Show(line );
                            string[] str = line.Split('@');
                            string num = str[0];
                            string Addresslist = str[1];
                            cmd.Parameters.Clear();
                            cmd.Parameters.Add(new SqlParameter("number", num));
                            cmd.Parameters.Add(new SqlParameter("address", Addresslist));
                            cmd.ExecuteNonQuery();
                        }



                    }
                }

            }
            MessageBox.Show("数据导入成功!");

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

2 个回复

倒序浏览
string[] lines = File.ReadAllLines(file )这里要加个参数:Encoding.GetEncoding("gb2312")

string[] lines = File.ReadAllLines(file,Encoding.GetEncoding("gb2312") )

可以防止中文乱码

点评

感谢 ,我用string[] lines = File.ReadAllLines(file,Encoding.Default)把它解决啦  发表于 2011-11-17 19:23

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
感谢  ,我用string[] lines = File.ReadAllLines(file,Encoding.Default)把它解决啦   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马