拆分文本并在sql数据库中插入单词

时间:2013-12-04 00:40:10

标签: c#

我想选择包含.txt的文件,并将每个文本中的所有字符串拆分为数组 然后将划分的单词插入到sql数据库(word,counter)中,并按计数器计算每个文本中重复的单词,导致数据库表中未重复的单词>>

(1) - 计数器代码不正确我在我的代码中发现了几个错误>> (我想通过使用计数器来防止重复单词同时计算数据库中重复单词的次数。) (2) - 我的代码有静态路径(只有一个文本),但我希望用户选择他想要分割的文件。 (浏览..按钮) (3-)sql数据库无法显示阿拉伯语单词(?????)

namespace lib123
{
    public partial class Form1 : Form
    {
        SqlConnection sqlConn;
        SqlCommand sqlComm;
        SqlDataAdapter sqlAdptr;

        public Form1()
        {
            InitializeComponent();   
           sqlConn = new SqlConnection();
           sqlComm = new SqlCommand();
           sqlAdptr = new SqlDataAdapter();
           sqlComm.Connection = sqlConn;
           sqlComm.CommandType = CommandType.Text;
           sqlConn.ConnectionString = "Data Source=007-PC\\SQLEXPRESS ;Initial Catalog= Email_DB;Integrated Security =True ";

        }
        private void Form1_Load(object sender, EventArgs e)
        {
            FillGrid();             
        }
        private void button1_Click(object sender, EventArgs e)
        {              
            if (sqlConn.State != ConnectionState.Open)
                sqlConn.Open();

            // sqlComm = sqlConn.CreateCommand(); 

            StreamReader streamReader = new StreamReader(@"C:\Users\007\Desktop\spam-email\spamenglish.txt"); //get the file
            string stringWithMultipleSpaces = streamReader.ReadToEnd(); //load file to string
            streamReader.Close();

            Regex r = new Regex(" +"); //specify delimiter (spaces)
            string[] words = r.Split(stringWithMultipleSpaces); //(convert string to array of words)

            int c = 1;
            string strQry = "select ISNULL( max(id),0) as id from word_tb ";
            sqlComm.CommandText = strQry;

            int LastID = int.Parse(sqlComm.ExecuteScalar().ToString());
            string x ;
            String st = null;

            for (int i = 0; i < words.Length; i++)
            {
                string y = words[i];
                for (int j = 0; j <LastID; j++)
                {
                 x = "select word from word_tb where id = j";
                sqlComm.CommandText = x ;   
                    if (x.Equals(y))
                    {
                        c = c + 1;
                        string sql = "INSERT INTO word_tb (count) VALUES ('" + c + "') where id = i";
                        sqlComm.CommandText = sql;

                    }
                    else
                    {
                        LastID = LastID + 1;
                        st += "INSERT INTO word_tb(id, word,count) VALUES('" + LastID + "', '" + words[i].ToString() + "','" + c + "');";

                        //st += "INSERT INTO word_tb(word) VALUES('" + words[i].ToString() + "');";

                    }
                }
            }
            sqlComm.CommandType = CommandType.Text;
            sqlComm.CommandText = st;
            sqlComm.ExecuteNonQuery();
            FillGrid();
        }
        private void FillGrid()
        {
            DataTable tbl = new DataTable();
            string   strQry = "select * from word_tb ";             
            sqlComm.CommandText = strQry;
            sqlAdptr.SelectCommand = sqlComm;
            sqlAdptr.Fill (tbl) ;
            dataGridView1.DataSource = tbl;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }
        //private void btnDelete_Click(object sender, EventArgs e)
        //{
        //    string str = "DELETE FROM word_tb";
        //    sqlComm.CommandType = CommandType.Text;
        //    sqlComm.CommandText = str;
        //    sqlComm.ExecuteNonQuery();

        //    dataGridView1.Rows.Clear();


        //            }
    }
}

1 个答案:

答案 0 :(得分:0)

  

1计数器代码不正确我在代码中发现了几个错误?

您可以使用以下代码将文件Text基于words分割为space delimiter

代码:

 String strAllData = System.IO.File.ReadAllText(@"C:\Users\007\Desktop\spam-email\spamenglish.txt");
 String[]  words = strAllData.Split(' ');
  

2-我的代码有静态路径(只有一个文本),但我希望用户选择   他要分割的文件。 (浏览..按钮)?

您可以使用OpenFileDialog控件让用户选择他/她想要处理的文件。

<强>代码:

        OpenFileDialog fileDialog = new OpenFileDialog();
        if (fileDialog.ShowDialog() == DialogResult.OK)
        {
            String strAllData = System.IO.File.ReadAllText(fileDialog.FileName);
            String[]  words = strAllData.Split(' ');
        }
  

3 -sql数据库无法显示阿拉伯语单词(?????)?

触发SELECT查询时,

Sql Server无法显示Uni Code个字符,因为您已将表格列/字段创建为varchar

解决方案:如果要在触发Arabic查询时获取SELECT字符,则应使用{创建表格列以接受Uni Code个字符{1}}数据类型而不是NVARCHARVARCHAR代表N

第1步:将您的表格列设为National language character set,如下所示:

NVARCHAR

第2步:在将数据插入create table sample( [name] [nvarchar](100) NOT NULL) 列时,使用N作为前缀。 N作为前缀表示所有后续字符都是NVARCHAR个字符。

代码:

Uni Code

现在,如果您触发INSERT INTO sample VALUES(N'لا أتكلم العربية'); 查询,您将能够看到SELECT字符。