C#调用存储过程报错:System.Data.SqlClient.SqlException: Execution Timeout Expired.

敌花师 2017-08-14 07:22:16
我在sql里面查询,用时1秒不到,在c#中调用就显示System.Data.SqlClient.SqlException: Execution Timeout Expired.
存储过程代码如下:
USE [数据库名]
GO
/****** Object: StoredProcedure [dbo].[user_register] Script Date: 2017-08-14 14:54:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description: 用户注册
-- Return:-10代表程序错误,0代表注册成功,1代表账号已经存在,2代表手机号已经注册过,10代表邀请码不正确
-- =============================================
ALTER PROCEDURE [dbo].[user_register]
--传入参数:用户名
@users_name varchar(50),
--传入参数:密码
@password varchar(50),
--传入参数:加密代码
@salt varchar(50),
--传入参数:真实姓名
@realname varchar(50),
--传入参数:身份证号
@id_number varchar(50),
--传入参数:手机号
@mobile varchar(50),
--传入参数:邀请码标识1(id)
@invitationCode1 varchar(50),
--传入参数:邀请码标识2(salt)
@invitationCode2 varchar(50),
--状态
@status int,
--默认权限分组
@do_group_id int
AS
BEGIN
SET NOCOUNT ON;
--判断账号是否存在
declare @count1 int;
set @count1=(select count(*) from [dbo].[users] where user_name=@users_name);
if @count1>0
begin
select 1 as 返回值;
return;
end
--判断手机号是否重复
declare @count2 int;
set @count2=(select count(*) from [dbo].[users] where mobile=@mobile);
if @count2>0
begin
select 2 as 返回值;
return;
end
--验证邀请码
declare @count3 int;
set @count3=(select count(*) from [dbo].[users] where id=@invitationCode1 and salt=@invitationCode2);
--count3大于0代表邀请码没错
if @count3=0
begin
select 10;
return;
end;
--开启事物
Begin Transaction
--开始添加用户
declare @users_uid int;
insert into [dbo].[users] (group_id ,user_name, salt, password, mobile, realname, id_number,status)
values(@do_group_id,@users_name,@salt,@password,@mobile,@realname,@id_number,@status);
set @users_uid= (select @@IDENTITY);
--创建下群
declare @group_id int;
insert into [dbo].[users_group_info]( users_uid, nickname, attribute) values(@users_uid,@users_name,'下群');
set @group_id= (select @@IDENTITY);
--加入到下群
insert into [dbo].[users_group_nexus](group_id, users_uid, nickname, role, status)
values(@group_id,@users_uid,@users_name,'群主',1);
--加入到上群
insert into [dbo].[users_group_nexus](group_id, users_uid, nickname, role, status)
values(@group_id,(select id from [dbo].[users] where id=@invitationCode1 and salt=@invitationCode2),'新成员','普通成员',1);
--赠送积分和金币
declare @point int;
set @point=(select top 1 point from [dbo].[user_groups] where is_lock=0 order by is_default desc,id asc);
if @point>0
begin
update [dbo].[users] set point=@point where id=@users_uid;
--记录日志
insert into [dbo].[user_point_log]( user_id, user_name, value, remark)
values(@users_uid,@users_name,@point,'注册时平台赠送');
end
declare @amount int;
set @amount=(select top 1 amount from [dbo].[user_groups] where is_lock=0 order by is_default desc,id asc);
if @amount>0
begin
update [dbo].[users] set amount=@amount where id=@users_uid;
--记录日志
insert into [dbo].[user_amount_log]( user_id, user_name, payment_id, value, remark)
values(@users_uid,@users_name,5,@amount,'注册时平台赠送');
end

COMMIT TRANSACTION
IF @@error <> 0 --发生错误
BEGIN
ROLLBACK TRANSACTION;
select -10;
return;
END
select 0; --执行成功
END

c#后台代码:
  
sql语句: exec user_register 'zhangsan666','6C7277DBD846CFC1C64364DE12214FD4','0FXJ2L','张三666','11111111111111111','15566666666','1','4B2H04',0,1"

/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString">计算查询结果语句</param>
/// <returns>查询结果(object)</returns>
public static object GetSingle(string SQLString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
}
}
}
...全文
941 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2017-08-15
  • 打赏
  • 举报
回复
断点调试一下,看了下sql比较简单, password和status作为关键字,最好[]括起来。 你可以看看sqlprofile里是不是有执行的存储过程和具体参数
wang_peng_yl 2017-08-15
  • 打赏
  • 举报
回复
看代码和C#没什么关系,你在sql管理工具里, 执行一下 exec user_register 'zhangsan666','6C7277DBD846CFC1C64364DE12214FD4','0FXJ2L','张三666','11111111111111111','15566666666','1','4B2H04',0,1" 看看有什么错
exception92 2017-08-15
  • 打赏
  • 举报
回复
SqlConnection 不要using,执行完毕手动释放资源。 Debug模式调试把,看看到底是 Open的超时还是 executeScalar 有错。 http://www.cnblogs.com/alexis/archive/2010/11/06/1870519.html
正怒月神 2017-08-15
  • 打赏
  • 举报
回复
引用 4 楼 oBehavior 的回复:
[quote=引用 3 楼 hanjun0612 的回复:] 断点调试一下,看了下sql比较简单, password和status作为关键字,最好[]括起来。 你可以看看sqlprofile里是不是有执行的存储过程和具体参数
我的失误,c#后台方法有方法访问数据库,可能导致数据库忙碌,当我在c#后台方法只执行存储过程没有任何别的数据库操作时,执行不到1秒[/quote] 那就可能是多个操作的死锁问题导致的
敌花师 2017-08-15
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
断点调试一下,看了下sql比较简单, password和status作为关键字,最好[]括起来。 你可以看看sqlprofile里是不是有执行的存储过程和具体参数
我的失误,c#后台方法有方法访问数据库,可能导致数据库忙碌,当我在c#后台方法只执行存储过程没有任何别的数据库操作时,执行不到1秒

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧