下面是我正在编辑项目中的一段代码,一字未改。
运行时正常,逻辑应该没有问题。
我想请问:效率和事务方面要不要改进?虽然下面此种情况添加的记录不会太多,但如果添加记录达成千上万条,这种事务处理方法有没有问题?效率会不会太低?期待牛人的分析!#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
运行时正常,逻辑应该没有问题。
我想请问:效率和事务方面要不要改进?虽然下面此种情况添加的记录不会太多,但如果添加记录达成千上万条,这种事务处理方法有没有问题?效率会不会太低?期待牛人的分析!#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
解决方案 »
- 2级联动dropdownlist绑定
- AspnetUpload菜鸟问题
- GridView 删除记录后怎样更新?
- 引用了一个dll库,出错了
- 关于ExecuteScalar()的连接...在线等...五分钟结贴...
- 在asp.net中如何判断对象已存在,有关购物车的,请高位高手帮一下!!
- 如何检查文本中的某一行,将某个字符替换为另一个字符?如?替换为TAB键
- 高分求助:IIS无法连接到远程服务器!
- 存储过程中怎么实现模糊查询???
- 采用基于组件开发的结构问题?在线等。
- !IsPostBack下不执行,晕头啊
- IIS6.0+VS 2005+OpenFlashChart 1.0 部署后图表显示不出来---求高手指点
/// 清空正则表达式语法表 W_REGEXSTD 记录,从文本文件解析数据并重新导入表中。
/// </summary>
/// <param name="_filename">文本文件名</param>
/// <returns>无</returns>
public void ImportFromTxt(string _filename)
{
StreamReader sr = new StreamReader(_filename, Encoding.Default);
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); while ((str = sr.ReadLine()) != null)
{
cmd.Parameters["@admin_name"].Value = str;
cmd.ExecuteNonQuery();
}
myTrans.Commit();
}
catch
{
myTrans.Rollback();
throw new ApplicationException("文本文件导入失败!");
}
finally
{
sr.Close();
}
}
return;
}
http://www.cnblogs.com/nankezhishi/archive/2009/08/15/bulkinsert.html