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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨礼文 中级黑马   /  2012-4-2 12:09  /  1574 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是我写的导入导出代码   
if (ofdOpen.ShowDialog() != DialogResult.OK)
            {
                return;

            }
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
           

                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    using (SqlCommand cnd = conn.CreateCommand())
                    {
                       
                        FileStream fileStream = File.OpenRead(ofdOpen.FileName);

                        StreamReader reader = new StreamReader(fileStream);
                        string lines = null;
                        while ((lines = reader.ReadLine()) != null)
                        {
                            cnd.Parameters.Clear();
                            string[] str = lines.Split('|');
                            string name = str[0];
                            int age = Convert.ToInt32(str[1]);
                            cnd.CommandText = "insert into T_Persons (FName ,FAge) values (@name,@age)";
                            cnd.Parameters.Add(new SqlParameter("name", name));
                            cnd.Parameters.Add(new SqlParameter("age",age));
                            cnd.ExecuteNonQuery();
                        }
                        


                    }

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


这是视频里的代码
if (ofdImport.ShowDialog() != DialogResult.OK)
                //ofdImport是对话框的名字  ShowDialog 运行对话框  DialogResult 指定标示符以指示对话框的返回值  OK 对话框的返回值
            {
                return;
            }
            using (FileStream fileStream = File.OpenRead(ofdImport.FileName))
                //FileStream 支持同步读写操作 也支持异步读写操作   fileStream 局部变量File提供用于创建 复制 删除 移动和打开文件的静态方法
                //OpenRead 打开现有文件进行读取  ofdImport.FileName  获取或设置一个包含在文件对话框中选定的文件名的字符串
            {
                using (StreamReader streamReader = new StreamReader(fileStream))//StreamReader 读取字符串   streamReader 局部变量
                {
                    using (SqlConnection conn = new SqlConnection(@"Data Source=.\MSSQLSERVER2012;
AttachDbFilename=E:\代码\我的第一个dmf\数据导入导出\Database1.mdf;
Integrated Security=True;User Instance=True"))
                    //创建连接非常的耗时的,因此不要每次操作都创建连接
                    {
                        conn.Open();
                        using (SqlCommand cnd = conn.CreateCommand())
                        {
                            cnd.CommandText = "Insert into T_Persons (Name,Age) values (@Name,@Age )";
                            string line = null;
                            while ((line = streamReader.ReadLine()) != null)
                           
                            {
                                string[] strs = line.Split('|');
                                string name = strs[0];
                                int age = Convert.ToInt32(strs[1]);
                                
                                cnd.Parameters.Clear();//!!!!!!  参数不能重复添加,在while中一直用的就是一个SqlCommand对象
                                cnd.Parameters.Add(new SqlParameter("@Name", name));
                                cnd.Parameters.Add(new SqlParameter("@Age", age));
                                cnd.ExecuteNonQuery();//别忘记了 !! 且经常会出错

                            }

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


求两者的区别

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
宋天琪 + 1
黄珍 + 10 调断点调试,评分里面只有金钱+分,技术加.

查看全部评分

4 个回复

倒序浏览
运行时都不出错
回复 使用道具 举报
还是在你的文件流的读写器中,建议try catch finnaly或则using!
如果你有时候需要定义一个缓冲区,将数据放入缓冲区的时候,
不关闭读写器以及文件流,那么可能从缓冲区拿不到完整的的数据,
这个时候就悲剧了,我们不要只关注程序的错误,而不在乎程序中的警告,和隐含的危险。

评分

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

查看全部评分

回复 使用道具 举报
评分里只有金钱加分,技术加分在哪呢?
回复 使用道具 举报
黄珍 发表于 2012-4-4 06:18
评分里只有金钱加分,技术加分在哪呢?

非常感谢  ,  技术分版主才有吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马