Asked by:
DbContext ExecuteSqlCommand always return -1

Question
-
User-1256377279 posted
Hi Guys,
I am using DbContext ExecuteSqlCommand to execute below stored procedure but i always get -1 even if there is 1 record or no records.
SP
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SprFindPlaceByPlaceName] ( @PlaceName nvarchar (500), @PlaceNameQuoted nvarchar(502), @CivilParish nvarchar (500), @CivilParishQuoted nvarchar(502), @localAdmin nvarchar (500), @localAdminQuoted nvarchar(502), @WiderAdmin nvarchar (500), @WiderAdminQuoted nvarchar(502), @Country nvarchar (60), @CountryQuoted nvarchar(62), @DateRange varchar (50), @DateRangeQuoted Varchar(52) ) AS DECLARE @sql nvarchar(2000) DECLARE @where nvarchar(2000) DECLARE @fields nvarchar(2000) SET @sql = '' SET @where = '' SET @fields = '' SET @where += 'Where TcRecords.RecordId = SA.RecordId ' SET @where += ' AND SA.ItemTypeId = 48 and PlaceName = N''' + @PlaceName + '''' SET @where += ' AND CivilParish = N''' + @CivilParish + '''' SET @fields += ', CivilParish' SET @where += ' AND LocalAdminUnit = N''' + @localAdmin + '''' SET @fields += ', LocalAdminUnit as LocalAdmin' SET @where += ' AND WiderAdminUnit = N''' + @WiderAdmin + '''' SET @fields += ', WiderAdminUnit as WiderAdmin' SET @where += ' AND Country = N''' + @Country + '''' SET @fields += ', Country' SET @where += ' AND DateRange = N''' + @DateRange + '''' SET @fields += ', DateRange' SET @sql = 'SELECT MainName as PlaceName' SET @sql += @fields SET @sql += ', ItemXob, TcRecords.itemtypeid, TcRecords.RecordId, TcRecords.LastModifiedOn, TcRecords.LastModifiedBy FROM TcRecords, TcShreddedAuthority as SA ' SET @sql += @where PRINT @sql EXEC sp_executesql @stmt = @sql RETURN
C#
try { var affectedRows = db.Database.ExecuteSqlCommand("exec SprFindPlaceByPlaceName @PlaceName, @PlaceNameQuoted, @CivilParish, @CivilParishQuoted, @localAdmin, @LocalAdminQuoted, @WiderAdmin, @WiderAdminQuoted, @Country, @CountryQuoted, @DateRange, @DateRangeQuoted", new SqlParameter("@PlaceName", p_placeName), new SqlParameter("@PlaceNameQuoted", placeNameQuoted), new SqlParameter("@CivilParish", p_civilParish), new SqlParameter("@CivilParishQuoted", civilParishQuoted), new SqlParameter("@localAdmin", p_localAdmin), new SqlParameter("@LocalAdminQuoted", localAdminQuoted), new SqlParameter("@WiderAdmin", p_widerAdmin), new SqlParameter("@WiderAdminQuoted", widerAdminQuoted), new SqlParameter("@Country", p_country), new SqlParameter("@CountryQuoted", countryQuoted), new SqlParameter("@DateRange", p_dateRange), new SqlParameter("@DateRangeQuoted", dateRangeQuoted)); if (affectedRows != 0) { result.Result = false; result.FailureDescription.Add("Place name is not unique"); } } catch (Exception ex) { result.Result = false; result.FailureDescription.Add(ex.Message); }
Many Thanks
Shabbir
Tuesday, May 21, 2019 8:36 AM
All replies
-
User753101303 posted
Hi,
What if you remove the PRINT statement?
Tuesday, May 21, 2019 8:54 AM -
User-1256377279 posted
I have removed still the same :( -1
Tuesday, May 21, 2019 9:52 AM -
User475983607 posted
I am using DbContext ExecuteSqlCommand to execute below stored procedure but i always get -1 even if there is 1 record or no records.ExecuteSqlCommand is used for INSERT, UPDATE, and DELETE scripts not SELECT. Please see the following.
Tuesday, May 21, 2019 11:41 AM -
User503812343 posted
Try FromSQL
var affectedRows = db.Database.FromSQL("exec SprFindPlaceByPlaceName @PlaceName, @PlaceNameQuoted, @CivilParish, @CivilParishQuoted, @localAdmin, @LocalAdminQuoted, @WiderAdmin, @WiderAdminQuoted, @Country, @CountryQuoted, @DateRange, @DateRangeQuoted", new SqlParameter("@PlaceName", p_placeName), new SqlParameter("@PlaceNameQuoted", placeNameQuoted), new SqlParameter("@CivilParish", p_civilParish), new SqlParameter("@CivilParishQuoted", civilParishQuoted), new SqlParameter("@localAdmin", p_localAdmin), new SqlParameter("@LocalAdminQuoted", localAdminQuoted), new SqlParameter("@WiderAdmin", p_widerAdmin), new SqlParameter("@WiderAdminQuoted", widerAdminQuoted), new SqlParameter("@Country", p_country), new SqlParameter("@CountryQuoted", countryQuoted), new SqlParameter("@DateRange", p_dateRange), new SqlParameter("@DateRangeQuoted", dateRangeQuoted));
Thursday, May 23, 2019 7:42 PM