首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

牛人请进:一段代码,事宜及效率方面要不要改进

2013-07-16 
牛人请进:一段代码,事务及效率方面要不要改进?下面是我正在编辑项目中的一段代码,一字未改。运行时正常,逻

牛人请进:一段代码,事务及效率方面要不要改进?
下面是我正在编辑项目中的一段代码,一字未改。
运行时正常,逻辑应该没有问题。
我想请问:效率和事务方面要不要改进?虽然下面此种情况添加的记录不会太多,但如果添加记录达成千上万条,这种事务处理方法有没有问题?效率会不会太低?

期待牛人的分析!

#region 方法:public int ImportFromTxt(string _filename)。清空正则表达式语法表 W_REGEXSTD 记录,从文本文件解析数据并重新导入表中。
/// <summary>
/// 清空正则表达式语法表 W_REGEXSTD 记录,从文本文件解析数据并重新导入表中。
/// </summary>
/// <param name="_filename">文本文件名</param>
/// <returns>有效语法类别数 * 10000 + 有效记录数</returns>
public int ImportFromTxt(string _filename)
{
    //文本文件的格式已经其他类检测正确才可以实例运行本方法,文本基本格式如下:
    //###正则表达式语法说明###
    //语法类别:>=元字符
    //\b语法说明:>=单词
    //\n语法说明:>=换行

    string str;//读取的行数据
    string linegroup = "";//类别
    int group = 0;//类别数
    int records = 0;//记录数
    StreamReader sr = new StreamReader(_filename, Encoding.Default); //using System.IO 、using System.Text;

    W_DATA wd = new W_DATA();
    SqlConnection conn = wd.GetConn();
    using (conn)
    {
        SqlCommand cmd = new SqlCommand("Truncate table W_REGEXSTD", conn);
        cmd.CommandType = CommandType.Text;

        conn.Open();
        SqlTransaction myTrans = conn.BeginTransaction();
        cmd.Transaction = myTrans;
        try
        {
            cmd.ExecuteNonQuery();
            cmd.CommandText = "pro_insert_REGEXSTD";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@admin_name", SqlDbType.NVarChar, 50);
            cmd.Parameters.Add("@admin_expression", SqlDbType.NVarChar, 50);
            cmd.Parameters.Add("@admin_directions", SqlDbType.NVarChar);



            while ((str = sr.ReadLine()) != null)
            {
                if (str.Length < 7) continue;//无效行,重新读取
                if (str.Substring(0, 7) == "语法类别:>=")
                {
                    linegroup = str.Substring(7);
                    group++;
                }
                else if (str.IndexOf("语法说明:>=") >= 0)
                {
                    cmd.Parameters["@admin_name"].Value = linegroup;
                    cmd.Parameters["@admin_expression"].Value = str.Remove(str.IndexOf("语法说明:>="));
                    cmd.Parameters["@admin_directions"].Value = str.Substring(str.IndexOf("语法说明:>=") + 7);
                    cmd.ExecuteNonQuery();
                    records++;
                }
            }
            myTrans.Commit();
        }
        catch
        {
            myTrans.Rollback();
            throw new ApplicationException("文本文件导入正则表达式语法表失败!");
        }
        finally
        {


            sr.Close();
        }
    }
    return (group * 10000 + records);
}
#endregion


[解决办法]
很好的几种方式,可以参考:
http://www.cnblogs.com/nankezhishi/archive/2009/08/15/bulkinsert.html

热点排行