I am working on a ASP.net WebAPI project. One functionality of the project requirement is to update craft type. The craft table contains columns for craftTypeKey, craftTypeName and craftTypeDescription. I need to update the columns craftTypeName and craftTypeDescription. The problem I face is, the number of rows provided from the UI is dynamic. It can be an array (or a list). I am using SQL stored procedure to perform the DB update operations. Now I am using an SP which updates one row of the table and calls the SP in a loop till all the elements are updated. The problem of my approach is if I am having an update error(for some reason) in between the loop, I am having no way to inform the UI part, that their occurred an error while updation. Only the last row update status is provided to the UI client(in JSON format.) I need to update the web api output with number of rows successfully updated and number of rows where update failure occured.
The code I used to perform db update is as follows.
ALTER PROCEDURE [dbo].[usp_UpdateCraftType]
@OrgKey INT,
@CraftTypeKey INT,
@CraftTypeName VARCHAR(50),
@CraftTypeDescription VARCHAR(128) AS
BEGIN
SET NOCOUNT ON;
DECLARE @rowcount1
BEGIN
UPDATE [dbo].[CraftTypes]
SET
[CraftTypeName]=@CraftTypeName
,[CraftTypeDescription]=@CraftTypeDescription
WHERE CraftTypeKey=@CraftTypeKey
SET @rowcount1 = @@ROWCOUNT
IF @rowcount1 =0
SELECT -167;
ELSE
SELECT 167;
END
END
C# code for update craft type api is
public PageViewModel UpdateCraftType( CraftTypes[] craftType)
{
objPageViewModel = new PageViewModel();
EmployeeAccessService emplAccess = new EmployeeAccessService();
for (int i = 0; i < craftType.Length; i++)
{
if (craftType[i] != null)
{
DataSet dsCraftTypeUpdateResult = new DataSet();
dsCraftTypeUpdateResult = emplAccess.UpdateCraftType(new { CraftTypeKey = craftType[i].CraftTypeKey, CraftTypeName = craftType[i].CraftTypeName, CraftTypeDescription = craftType[i].CraftTypeDescription });
if (dsCraftTypeUpdateResult != null && dsCraftTypeUpdateResult.Tables[0].Rows.Count > 0)
{
if (Convert.ToInt32(dsCraftTypeUpdateResult.Tables[0].Rows[0][0]) == 167)
{
objPageViewModel.FillPageViewModelObject(ResponseStatus.CraftTypeUpdated);
}
else
{
objPageViewModel.FillPageViewModelObject(ResponseStatus.CraftTypeUpdateFailure);
}
}
}
}
return objPageViewModel;
}
public DataSet UpdateCraftType(object model)
{
DataSet dsCraftTypeUpdated = new DataSet();
DatabaseModel dbModel = new DatabaseModel();
IDataAccess dataAceess = new DataAccessObject();
dbModel.CommandText = StoredProcedure.usp_UpdateCraftType;
dbModel.Params = model;
dsCraftTypeUpdated = dataAceess.GetData(dbModel);
return dsCraftTypeUpdated;
}
public DataSet GetData(DatabaseModel dbmodel)
{
string connectionstring = _context.Database.Connection.ConnectionString; //_context.Database.Connection.ConnectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionstring);
builder.ConnectTimeout = Convert.ToInt32(ConfigManager.GetAppSettingValue("ConnectionTimeOut"));
SqlConnection connection = new SqlConnection(builder.ConnectionString);
datahelper = new DataAccessHelper(connection);
SqlDataAdapter da = null;
DataSet ds = new DataSet();
connection.Open();
using (SqlCommand cmd = datahelper.GetCommandObject(dbmodel))
{
da = new SqlDataAdapter(cmd);
da.Fill(ds);
}
connection.Close();
return ds;
}
public class PageViewModel
{
public int StatusCode { get; set; }
public string StatusMessage { get; set; }
public int TotalCount { get; set; }
public object ModelObject { get; set; }
public PageViewModel FillPageViewModelObject(ResponseStatus statusCode_i, object modelObject_i = null)
{
this.StatusCode = (int)statusCode_i;
this.StatusMessage = EnumerationHelper.GetEnumDescription(statusCode_i);
this.ModelObject = modelObject_i;
return this;
}
}
Thanks for the Help.....