cmd->CommandType = CommandType::StoredProcedure;
解决方案 »
- 求助:通过程序修改环境变量后,如何让其即时生效
- 请问有在vs2008下用过agsxmpp的么?
- double转string的问题
- Row.RowState 问题。求教
- C#请教一个简单的问题,请那位指点下。谢谢!!
- 在UserControl控件中使用DirectX绘图
- XmlSerializer 的Serialize()方法只能将对象写进文件,能不能不写文件直接写进流对象里,然后变成数组
- 在asp.net中使用TcpClient发送数据的问题
- vs怎么连接服务器上的oracle
- 怎么没我的winform中的datagrid不能应用样式啊。
- 如何将MSSQL数据库中的表转换成MSSQL CE中的表
- 学习C#过程中不解的疑问?
cmd->Parameters->Add(L"@LetRoomID", SqlDbType::VarChar, 20);
cmd->Parameters->Add(L"@chkTypeID", SqlDbType::Int, 4);
cmd->Parameters->Add(L"@chkResult", SqlDbType::Int, 4);
cmd->Parameters->Add(L"@WorkerID", SqlDbType::VarChar, 20);
DateTime ^dtNow3 = DateTime::Now;
for each(DataRow^ dr in tbChk->Rows){
//DateTime ^dtNow3 = DateTime::Now;
if(dr->IsNull(dcLetChkDesc) || String::IsNullOrEmpty(dr[dcLetChkDesc]->ToString()->Trim()))
cmd->Parameters[0]->Value = DBNull::Value;
else
cmd->Parameters[0]->Value = dr[dcLetChkDesc]->ToString(); if(dr->IsNull(dcLetChkLetID) || String::IsNullOrEmpty(dr[dcLetChkLetID]->ToString()->Trim()))
cmd->Parameters[1]->Value = DBNull::Value;
else
cmd->Parameters[1]->Value = dr[dcLetChkLetID]->ToString(); if(dr->IsNull(dcLetChkTypeID))
cmd->Parameters[2]->Value = DBNull::Value;
else
cmd->Parameters[2]->Value = Convert::ToInt32(dr[dcLetChkTypeID]);
if(dr->IsNull(dcChkResult))
cmd->Parameters[3]->Value = DBNull::Value;
else
cmd->Parameters[3]->Value = Convert::ToInt32(dr[dcChkResult]); cmd->Parameters[4]->Value = strWorkerID; /*if(!m_dbAccess->RunProc(L"proc_sys_getLetChk", params1, sqlTran))
throw gcnew Exception();*/
cmd->ExecuteNonQuery();
//dtNowE = DateTime::Now;
//AddTest(strWorkerID, dtNow3, dtNowE, L"each", (int)RetEnum::RET_OK);
}
dtNowE = DateTime::Now;
AddTest(strWorkerID, dtNow3, dtNowE, L"DispatchTask1", (int)RetEnum::RET_OK);
DataColumn ^dcLetChkDesc = tbChk->Columns[L"rrsiicRes"], ^dcLetChkLetID = tbChk->Columns[L"rrsNum"],
^dcLetChkTypeID = tbChk->Columns[L"rrsiicID"], ^dcChkResult = tbChk->Columns[L"rrsiicResult"];基本情况:
该 WebService 作为中介,介于客户端与后台管理系统之间,由客户端向 Webservice 发起请求,只后WebService 向后台管理系统请求获取数据,后台管理系统结果以 DataSet 参数形式传回。问题:
在获得管理系统数据之后,发现如果数据 在大约 400 条左右,该段入库代码执行大约 2.343 秒 级别。如果在代码前后加事务处理,多人访问该方法时,将发生进程间事务锁定冲突,无法入库。
向各位高手求解:
代码编写是否合理? 如何进行优化,以提高入库效率?
情况是这样的:这个客户端是移动设备,WebService 是作为中间层,负责终端与后台系统之间数据交互。
2.Dataset是一个较大的XML,请测试下下直接重webservice取这个Dataset的效率
3.找到问题后再考虑其他因素及优化。
4.对于Dataset的数据插入应该可以只调一次数据库,
2 WEB SERVICE的请求还需要经过打包XML的SOAP请求,收到后还要转换为你的参数,这一块其实也是性能的瓶颈.
运用的是存储过程方式写入数据库。
存储过程如下:
proc proc_sys_getLetChk --从管理系统下载检查信息
(
@chkDesc varchar(300),
@LetRoomID varchar(20),
@chkTypeID int,
@chkResult int,
@WorkerID varchar(20)
)
asdeclare @iErrors int
set @iErrors = 0if(not exists(select * from CheckItems where LetRoomID = @LetRoomID
and WorkerID = @WorkerID
and chkTypeID = @chkTypeID))
begin
insert into CheckItems(chkDesc,LetRoomID, chkTypeID,chkResult,WorkerID)
values(@chkDesc,@LetRoomID,@chkTypeID,@chkResult,@WorkerID)
set @iErrors = @iErrors + @@error
end
else
begin
update CheckItems
set chkResult = @chkResult,
chkDesc = @chkDesc
where LetRoomID = @LetRoomID
and WorkerID = @WorkerID
and chkTypeID = @chkTypeID
set @iErrors = @iErrors + @@error
endif(0 != @iErrors)
begin
return -1
end
else
begin
return 0
end
exec proc_sys_getLetChk ...
.
.
.一批,之后送入数据库执行?这是个好思路,我试试,估计的确会提高效率!
我没太明白你的意思,是不是如下过程:
启动事务-〉循环执行-〉提交事务。
我的过程是这样的,比较简单,希望多多指点。