积极答复者
使用SqlDataReader 为什么会锁表,而且产生了近2万个锁,导致表锁死,无法对表的修改程序

问题
-
查询语句
select a.reg_id,a.service_nbr,a.vouchers_code,a.vouchers_price,convert(char(10),a.voucher_eff_date,20),convert(char(10),a.voucher_exp_date,20) ,a.voucher_install_employee,a.voucher_accpet_employee,a.voucher_install_site_id,a.voucher_accept_site_id,a.install_order_id,a.accept_order_id,a.voucher_status,a.prd_inst_id,a.prd_inst_name,a.ofr_id,a.ofr_name,a.ofr_type,a.ofr_status,a.ofr_inst_id,a.ofr_group_name,a.ofr_grade_value,a.diff_machine_price_pay_fee,a.stored_fee,a.real_pay_fee,a.crm_dev_code,crm_dev_name,a.crm_dev_dept_name,a.dev_employee,a.dev_site_id,a.dev_contact_tel,a.vpn_group_code,a.vpn_group_name,a.crm_mkt_res_name,a.crm_res_inst_nbr,a.mkt_res_name,a.res_inst_nbr,a.pre_rule_name,a.pre_rule_id,a.beyond_crm_pre_rule_name,a.beyond_crm_pre_rule_id,a.machine_recycling_type,a.uim_card_number,a.register_site_id,a.channel_type_id,c.machine_type,a.reimburs_id,a.voucher_used_site_id,a.reason,convert(char(10),a.terminal_receive_date,20),a.local_company_direct_pay,a.retail_guide_price,a.retail_pay,a.electronic_channels_pay,a.direct_sale_department,a.terminal_receive_date,a.reg_type,a.special_direct_pay,a.ofr_order_id,a.ofr_order_create_date,a.crm_stored_fee,a.crm_serial_install_date,a.should_diff_machine_price_pay_fee,d.PRE_RULE_TYPE_ID,a.last_main_order_id,a.market_center_id,a.last_main_order_date,a.pay_according_date,a.prd_inst_desc from terminal_vouchers_registration a left join terminal_models_combine c on a.crm_mkt_res_name=c.machine_model left join tb_bil_pre_rule d on a.pre_rule_id=d.pre_rule_id where a.reg_type='直销' and a.status in(2,201,3) and a.register_date>='2011-07-25' and a.register_date<='2012-07-25 23:59:59' and a.area='551' and a.subarea='0' and a.direct_sale_department='60361229'执行
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (!reader.HasRows)
break;
while (reader.Read())
{
j++;
v_machine_type = "";
//v_distribute_fee = 0;
v_distribute_fee_involve = "";
v_local_company_direct_pay = "null";
答案
-
给出个人的建议
1.SQL连接的表太多,可能表的数据量大,导致查询速度慢,优化SQL
2.查询的时候可以使用锁,在表名称后面加上NOLOCK标识
2.使用完SqlDataReader 后,要记得关闭
http://blog.csdn.net/zx13525079024
- 已标记为答案 Bob ShenModerator 2012年8月10日 9:08
全部回复
-
给出个人的建议
1.SQL连接的表太多,可能表的数据量大,导致查询速度慢,优化SQL
2.查询的时候可以使用锁,在表名称后面加上NOLOCK标识
2.使用完SqlDataReader 后,要记得关闭
http://blog.csdn.net/zx13525079024
- 已标记为答案 Bob ShenModerator 2012年8月10日 9:08