【发布时间】:2014-04-03 10:43:51
【问题描述】:
我在 asp.net 中编写了一个 Web 服务,它只是通过存储过程将值插入到表中。网络服务通过安卓应用程序访问。我的服务应该只返回 TRUE(在插入的情况下)或 FALSE(在插入失败的情况下),但它也可能引发看起来很奇怪且普通用户无法理解技术术语的错误(异常),因此如何隐藏这些详细信息并显示正确的消息(或重定向)。可能有很多错误,例如超出范围异常、NullException 等。
网络服务:
public GPSWebservice () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public bool insertCoordinates(string param)
{
BLL bll = new BLL();
return bll.InsertCoordinates(param);
}
}
BLL
public bool InsertCoordinates(string param)
{
String[] parts = param.Split(',');
sqlCom.CommandText = "InsertCoordinates";
sqlCom.CommandType = CommandType.StoredProcedure;
bool result ;
sqlCom.Parameters.Add("@AddedDateTime", SqlDbType.VarChar).Value = Convert.ToDateTime(parts[0].ToString());
sqlCom.Parameters.Add("@IMEI", SqlDbType.VarChar).Value = parts[1].ToString();
sqlCom.Parameters.Add("@RecordedDateTime", SqlDbType.VarChar).Value = Convert.ToDateTime(parts[2].ToString());
sqlCom.Parameters.Add("@Latitude", SqlDbType.VarChar).Value = parts[3].ToString(); ;
sqlCom.Parameters.Add("@Longitude", SqlDbType.VarChar).Value = parts[4].ToString(); ;
sqlCom.Parameters.Add("@IsParking ", SqlDbType.Bit).Value = ((parts[5].ToString().Trim()).Equals("0")) ? false : true;
SqlParameter sqlParam = new SqlParameter("@result", SqlDbType.Int);
sqlCom.Parameters.Add(sqlParam);
sqlCom.Parameters["@result"].Direction = ParameterDirection.Output;
try
{
sqlCon.Open();
sqlCom.ExecuteNonQuery();
return result = Convert.ToBoolean(sqlParam.Value);
}
catch (Exception ex)
{
return false;
}
finally
{
sqlCon.Close();
}
}
}
SP:
ALTER PROCEDURE [dbo].[InsertCoordinates]
@AddedDateTime varchar(50),
@IMEI varchar(50),
@RecordedDateTime varchar(50),
@Latitude varchar(50),
@Longitude varchar(50),
@IsParking bit,
@result int output
AS
BEGIN
SET NOCOUNT ON;
Begin Try
If Not exists(select IMEI from dbo.Coordinates where IMEI =@IMEI AND Latitude=@Latitude AND @Longitude=@Longitude)
Begin
insert into dbo.Coordinates
values (@AddedDateTime, @IMEI, @RecordedDateTime, @Latitude, @Longitude, @IsParking)
Set @result = @@ROWCOUNT
IF(@result = 1)
Select @result
Else
Set @result=0
Select @result
End
Else
Begin
Set @result=0
Select @result
End
End Try
Begin Catch
Set @result=0
End Catch
END
【问题讨论】: