从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  )

//FrmMain.cs
//作者:Me
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace 数据库的链接
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            #region 写一个程序,要求:uName和uPass从文件导入,并将其插入到数据库WebSite的UserInfo表中
            //打开文件对话框
            OpenFileDialog ofd = new OpenFileDialog();

            //指定ofd的过滤器
            ofd.Filter = "文本文件|*.txt|所有文件|*.*";
            //指定ofd的是否多选择属性
            ofd.Multiselect = false;
            //指定ofd的初始化目录
            ofd.InitialDirectory = @"D:\";
            //指定ofd的标题
            ofd.Title = "请选择要打开的文本文件";

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txtFileName.Text = ofd.FileName;
            }

            

            #endregion
        }
        /// <summary>
        /// 需求增加
        /// 1.增加一个导入成功后弹出的统计对话框
        /// 2.增加判断如果,用户选择的是一个非法的文本文件,那么让Insert方法返回false
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImportData_Click(object sender, EventArgs e)
        {
            //判断文本框是否有值 并且 文件是否存在 并且 值是否为一个txt文件的路径
            if (String.IsNullOrEmpty(txtFileName.Text) 
                || !File.Exists(txtFileName.Text) 
                || !String.Equals(txtFileName.Text.Split('.')[txtFileName.Text.Split('.').Length - 1], "txt"))
            {
                MessageBox.Show("文件错误,请重新导入!");
                return;
            }

            //读取文本文件的数据,并循环导入
            string[] allLines = File.ReadAllLines(txtFileName.Text.Trim(), Encoding.Default);
            //定义一个判断是否全部导入的计数器
            int totalNumber = allLines.Length;
            int hasImportedNumber = 0;

            foreach (string str in allLines)
            {
                string[] eachLinesArray = str.Split('|');

                //传入要插入的用户名和密码
                if (str.IndexOf('|') != -1)
                {
                    //eachLines{string[1]} 表示的是eachLines是一个长度为1的字符串数组(也就是说只有eachLines[1]的位置有值)
                    if (SqlHelper.Insert(eachLinesArray[0], eachLinesArray[1]))
                    {
                        hasImportedNumber++;
                    }
                }
            }

            MessageBox.Show(String.Format("总共:{0}条\n成功导入:{1}条\n成功率:{2}%\n", totalNumber, hasImportedNumber, hasImportedNumber/(float)totalNumber*100));

        }

        private void btnOutPut_Click(object sender, EventArgs e)
        {
            //创建保存文本框对象
            SaveFileDialog sfd = new SaveFileDialog();
            
            //设置默认的保存格式,这里只有txt
            sfd.Filter = "文本文件(*.txt)|*.txt";
            //设置标题
            sfd.Title = "请选择要保存的文件";

            //当点击确定,获取路径
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                //创建一个空的泛型集合
                List<string> list = new List<string>();
                //使用查询函数将查询结果添加到泛型集合中
                SqlHelper.DataSelect(list);
                //将泛型集合的数组写入文件
                File.WriteAllLines(sfd.FileName, list);
            }

        }
    }



}
//SqlHelper.cs
//作者:Me
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace 数据库的链接
{
    /// <summary>
    /// SqlHelper用于执行数据库增删改查的操作
    /// </summary>
    class SqlHelper
    {
        private static string sqlStr = "server=.;database=WebSite;uid=sa;pwd=123456";

        /// <summary>
        /// 向数据库插入记录
        /// </summary>
        /// <param name="name">待插入用户名</param>
        /// <param name="pass">待插入密码</param>
        /// <returns></returns>
        public static bool Insert(string name, string pass)
        {
            using (SqlConnection conn = new SqlConnection(sqlStr))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    bool res = false;
                    cmd.CommandText = "insert UserInfo values (@name, @pass)";
                    cmd.Parameters.Add(new SqlParameter("@name", name));
                    cmd.Parameters.Add(new SqlParameter("@pass", pass));

                    try
                    {
                        conn.Open();
                        res = cmd.ExecuteNonQuery() > 0;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);

                    }

                    return res;
                }

            }
        }

        public static void DataSelect(List<string>  list)
        {
            using (SqlConnection conn = new SqlConnection(sqlStr))
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    SqlDataReader dr = null;

                    cmd.CommandText = "select uName,uPass from UserInfo";
                    try
                    {
                        conn.Open();
                        dr = cmd.ExecuteReader();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("数据库错误:\n"+ex.Message);
                        return;
                    }

                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            list.Add( String.Concat(dr[0].ToString(), "|", dr[1].ToString()) );
                        }
                    }
                    
                }
            }
            
        }
    }
}

 

 

文本文件D:\user.txt ,内容:

张三1|123
张三2 123
张三3 123
张三4|123
张三5|123
张三6|123
张三7|123
张三8|123
张三9|123
张三10|123
张三11|123
张三12|123
张三13|123
张三14|123
张三15|123

思路简介

1.点击“打开文件”从openFileDialog打开一个文件,并将路径存到txtFileName文本框中

2.点击“导入数据”按钮,首先检查文本框文件路径字符串的合法性,然后在循环中使用Insert()将数据一条条插入到数据库中

3.Insert(string name,string pass)方法,每调用一次,就将参数中的name和pass插到指定的数据表UserInfo中

4.点击“导出数据”,即打开SaveFileDialog,预先定义一个泛型集合,然后将集合的引用传递给DataSelect()方法,方法内部通过dr对象的遍历,将每行数据写入集合中

 

各种空间的命名和属性设置

控件

属性

事件

btnOpenFile

Text:打开文件

btnOpenFile_Click

btnImportFile

Text:导入数据

btnImportData_Click

btnOutPut

Text:导出数据

btnOutPut_Click

txtFileName