bool UpdateToSQL(SQLInfo &info,char Item[][50],int nCount)
{
CString strSQL;
CString strItem,strValue,strTemp,SQLItem;
try
{
strItem.Format("PC_Name,SN,Result,Fail_Item,Fail_Value,End_Time,Test_Time");
//
CString str;
sprintf((LPSTR)(LPCSTR)strTemp,Item[6]);
if(strTemp=="")
str="0";
else
{
int n;
n=atoi(strTemp);
str.Format("%d",n);
}
/* sprintf((LPSTR)(LPCSTR)strTemp,Item[7]);
if(strTemp=="")
sprintf(Item[7],"N");*/
strValue.Format("'%s','%s','%s','%s','%s','%s','%s'",Item[0],Item[1],Item[2],Item[3],
Item[4],Item[5],str);
//
for(int i=8;i<=nCount;i++)
{
SQLItem.Format("%d",i-7);
if (SQLItem.GetLength()==1)
SQLItem="R00"+SQLItem;
else if (SQLItem.GetLength()==2)
SQLItem="R0"+SQLItem;
else
SQLItem="R"+SQLItem;
strItem=strItem+","+SQLItem;
strValue=strValue+","+"'"+Item[i]+"'";
}
//
strSQL.Format("insert into %s with (tablock) (%s) values (%s)",info.Tablename,strItem,strValue);
//m_pConnection->Execute((_bstr_t)strSQL,NULL,NULL); 2007-10-18
//m_pConnection->Execute((_bstr_t)strSQL,NULL,adCmdText);
//m_pConnection->CommandTimeout=30;
//
//
m_pConnection->Execute((_bstr_t)strSQL,NULL,NULL);
for(int k=0;k<nCount;k++)
{
for(int j=0;j<50;j++)
strcpy(&Item[k][j],"");
}
}
catch(_com_error e)
{
strcpy(ErrMsg,e.Description());
return false;
}
return true;
}
当数据量比较少时,程序能够正常运行,但是当数据量比较多,比如有上万条时,多台电脑同时运行该程序并且操作同一个表时,就会出错,只有一台能够正常运行,其他的都会出错。
不知道这个问题该如何解决?是表被锁住了么?还是怎么了?有没有什么办法可以优化么?
请大家帮帮忙~~~~
9 个解决方案
#2
由于我需要读取大量txt文本,然后将需要的信息进行读取存放到数组中,然后再将数组中的数据插入到表中,所以好像楼上给的不适用。
继续等待高手解决~~~
继续等待高手解决~~~
#3
我以前做的也是根据表的内容读取大量文本,然后再插入到数据库的
因为没用sqlserver,只能说access的做法是
建议不要保存到数足,然后通过数祖一次性插入或者分批插入
而是在保存到一个临时文本里,再一次性导入
sqlserver有什么不同,不清楚。比如导入的差异,存储过程的应用等等
因为没用sqlserver,只能说access的做法是
建议不要保存到数足,然后通过数祖一次性插入或者分批插入
而是在保存到一个临时文本里,再一次性导入
sqlserver有什么不同,不清楚。比如导入的差异,存储过程的应用等等
#4
如果是操作大量的TXT数据,那么优化的方法有很多.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
#5
哈哈,那个帖子的楼主来了~~
#6
楼上的意思是将txt文本中需要的信息先截取出来存放到临时文本里,然后再一次性导入么?
可是我原数据txt文本是别的程序在不断生成的,数据采集需要模拟实现实时的效果,
而且得到的数据字段个数是不一定的,比如文本A需要插入到表A中的a1~a6的字段,但是文本B就需要插入到表A中的a1~a8字段。
这个该怎么实现呢?
所以我原先的设想就是一个个文本的读取,然后一条条插入到数据库中。然后将原先文本移动到备份文件夹内。
速度慢一点没关系,但是不能出现程序挂掉的现象。
可是我原数据txt文本是别的程序在不断生成的,数据采集需要模拟实现实时的效果,
而且得到的数据字段个数是不一定的,比如文本A需要插入到表A中的a1~a6的字段,但是文本B就需要插入到表A中的a1~a8字段。
这个该怎么实现呢?
所以我原先的设想就是一个个文本的读取,然后一条条插入到数据库中。然后将原先文本移动到备份文件夹内。
速度慢一点没关系,但是不能出现程序挂掉的现象。
#7
如果是操作大量的TXT数据,那么优化的方法有很多.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
========================================================================
========================================================================
好的。我先去试试看。谢谢楼上两位~~!
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
========================================================================
========================================================================
好的。我先去试试看。谢谢楼上两位~~!
#8
我用过bulk Insert, 10w级别的,耗时不到一分钟。
#9
bulk Insert
#1
#2
由于我需要读取大量txt文本,然后将需要的信息进行读取存放到数组中,然后再将数组中的数据插入到表中,所以好像楼上给的不适用。
继续等待高手解决~~~
继续等待高手解决~~~
#3
我以前做的也是根据表的内容读取大量文本,然后再插入到数据库的
因为没用sqlserver,只能说access的做法是
建议不要保存到数足,然后通过数祖一次性插入或者分批插入
而是在保存到一个临时文本里,再一次性导入
sqlserver有什么不同,不清楚。比如导入的差异,存储过程的应用等等
因为没用sqlserver,只能说access的做法是
建议不要保存到数足,然后通过数祖一次性插入或者分批插入
而是在保存到一个临时文本里,再一次性导入
sqlserver有什么不同,不清楚。比如导入的差异,存储过程的应用等等
#4
如果是操作大量的TXT数据,那么优化的方法有很多.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
#5
哈哈,那个帖子的楼主来了~~
#6
楼上的意思是将txt文本中需要的信息先截取出来存放到临时文本里,然后再一次性导入么?
可是我原数据txt文本是别的程序在不断生成的,数据采集需要模拟实现实时的效果,
而且得到的数据字段个数是不一定的,比如文本A需要插入到表A中的a1~a6的字段,但是文本B就需要插入到表A中的a1~a8字段。
这个该怎么实现呢?
所以我原先的设想就是一个个文本的读取,然后一条条插入到数据库中。然后将原先文本移动到备份文件夹内。
速度慢一点没关系,但是不能出现程序挂掉的现象。
可是我原数据txt文本是别的程序在不断生成的,数据采集需要模拟实现实时的效果,
而且得到的数据字段个数是不一定的,比如文本A需要插入到表A中的a1~a6的字段,但是文本B就需要插入到表A中的a1~a8字段。
这个该怎么实现呢?
所以我原先的设想就是一个个文本的读取,然后一条条插入到数据库中。然后将原先文本移动到备份文件夹内。
速度慢一点没关系,但是不能出现程序挂掉的现象。
#7
如果是操作大量的TXT数据,那么优化的方法有很多.
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
========================================================================
========================================================================
好的。我先去试试看。谢谢楼上两位~~!
1.使用OpenRowSet()
2.使用OpenDataSource()
3.Bulk Insert都可以高效的实现TXT/CSV/XLS数据的大量入库.
我使用过OpenRowSet/OpenDataSource操作CSV文件,14万行数据1分钟搞定入库.
insert into myTable
select * from OpenDataSource(...)...[filename#txt]
或者用OpenRowSet(...)
结合你的数据,看看这两个函数的用法,可以解决不少问题.
========================================================================
========================================================================
好的。我先去试试看。谢谢楼上两位~~!
#8
我用过bulk Insert, 10w级别的,耗时不到一分钟。
#9
bulk Insert