string[] TemLine = File.ReadAllLines(TxtDirectoryPath + "\\" + name, Encoding.GetEncoding("GB2312"));//读出数据有1万4千多条左右
foreach (string item in TemLine)
{
try
{
string[] Item = item.Split('\t');
//Item示例:邵小小 24,河南,未婚.
string[,] Values ={
{ "vName", Item[0] },
{"vInfo",Item[1]}
};
Add("UserInfo", Values);//执行数据插入操作
}
catch
{
;
}
}
//----------------------------------------------------------------------
//向数据库插入内容
/// <summary>
/// 向数据库添加内容
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="ColumnsAndValues">由列名和值组成的二维数组</param>
public void Add(string TableName, string[,] ColumnsAndValues)
{
string Columns = null;
string Values = null;
for (int i = 0; i < ColumnsAndValues.GetLength(0); i++)
{
Columns = Columns + ColumnsAndValues[i, 0] + ",";
Values = "\"" + Values + ColumnsAndValues[i, 1] + "\",";
}
Columns = Columns.Substring(0, Columns.Length - 1);
Values = Values.Substring(0, Values.Length - 1);
string insertStr = "insert into " + TableName + "(" + Columns + ") values(" + Values + ")";
//创建Connection对象
OleDbConnection conn = CreateConnection();
conn.Open();
OleDbCommand cmd = new OleDbCommand(insertStr, conn);
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();
conn.Dispose();
}关键代码如上,我在插入数据库时,用时3分多,请帮忙看一下代码出现了什么问题。
解决方案 »
- 我很迷茫 怎么学好一门编程语言
- 我想在winform的窗口中放置一个命令行窗口让用户输入执行命令,请问这个改用什么控件来做?
- 求类似notepad2的winform控件
- 判断是否安装了软件
- 数组控件
- 请问如何把这个字符串转换成日期型?
- TreeView的多层目录显示问题...急~!!!
- TabControl的问题!
- 这样的问题用什么样的控件?祝各位没休息的兄弟们新年快乐。
- InstallShield中如何实现安装时 覆盖旧版本?
- SQL Server数据库简单的删除问题!~
- WinForm里DevExpress..XtraTabbedMdiManager应用skin后,栏目Item里的LargeImage不显示了..
{
Open
Insert
Close
}改造一下程序,把Open和Close拿到外面来。Open
for 循环
{
Insert
}
Close
for 循环
{
sql += "插入的sql语句 ";
}Open
Insert( sql);
Close
Values = "\"" + Values + ColumnsAndValues[i, 1] + "\",";
应该改为
Values = Values + "'" + ColumnsAndValues[i, 1] + "',";
在数据插入时,它一直异常中
郁闷啊。这个try也另人挺郁闷的
耗时13秒,写完了,虽然还是不是很能接受。
就用 readline(循环)->处理此行 得到 Columns Values ->插入数据库中
可以减少一次循环
string fileName = TxtDirectoryPath + "\\" + name;
string insertStr = "insert into UserInfo (vName, vInfo) values ('{0}','{1}')";
using (FileStream fs = new FileStream("", FileMode.Open))
{
using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding("GB2312")))
{
OleDbConnection conn = CreateConnection();
OleDbCommand cmd = new OleDbCommand(conn);
conn.Open();
string line = null;
while ((line = sr.ReadLine()) != null)
{
string item = line.Split('\t');
cmd.CommandText = string.Format(insertStr, item[0], item[1]);
cmd.ExecuteNonQuery();
}
conn.Close();
conn.Dispose();
}
}
{
DateTime d = DateTime.Now;
csData cs = new csData();
string insertStr = "insert into userInfo (vName,vInfo) values('{0}','{1}')";
string[] Lines = File.ReadAllLines(FileName, Encoding.GetEncoding("GB2312"));
OleDbConnection conn = cs.CreateConnection(csData.GetDataPath);
conn.Open();
OleDbTransaction transaction = null;
OleDbCommand cmd = new OleDbCommand();
transaction = conn.BeginTransaction();
cmd.Transaction = transaction;
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
foreach (string line in Lines)
{
string[] item = line.Split('\t');
cmd.CommandText = string.Format(insertStr, item[0], item[1]);
cmd.ExecuteNonQuery();
}
transaction.Commit();
conn.Close();
conn.Dispose();
MessageBox.Show("己经导入所有的搜索结果,共用时" + (DateTime.Now - d));
}
连接时没有try,
执行时没有try,
插入出错时,事务就会一直挂在哪里。
建议把db封装一下,这样要写多少 new dbcommand, connecton哪,又容易出错,又不好定位错误。