C# 在C中获得奇怪的值
在存储过程中获取完全正确的数据。但当我试图在C数据表中获取该值时,得到的数据是错误的。我不知道为什么我会这样 以下是我的存储过程:C# 在C中获得奇怪的值,c#,sql-server,C#,Sql Server,在存储过程中获取完全正确的数据。但当我试图在C数据表中获取该值时,得到的数据是错误的。我不知道为什么我会这样 以下是我的存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetSurveyStatistic] (@SurveyID int, @NameOfSubmitter varchar(200), @NameOfPrivacyContact varchar(
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetSurveyStatistic]
(@SurveyID int,
@NameOfSubmitter varchar(200),
@NameOfPrivacyContact varchar(200),
@HspOrganizationalName varchar(200),
@HspSiteNumber varchar(200),
@FromDate datetime,
@ToDate datetime,
@weekly bit)
AS
BEGIN
IF (@ToDate IS NOT NULL)
SET @ToDate = DATEADD(DAY, 1, @ToDate)
IF @Weekly = 0
BEGIN
SELECT
CAST(CAST(StartedDateTime AS date) AS varchar(10)) Value,
COUNT(*) cnt
FROM
SubmittedSurveys
WHERE
(SurveyID = @SurveyID OR @SurveyID IS NULL)
AND (StartedDateTime >= @FromDate OR @FromDate IS NULL)
AND (StartedDateTime <= @ToDate OR @ToDate IS NULL)
AND (LOWER(ProvidedNameOfSubmitter) LIKE LOWER(@NameOfSubmitter) + '%'
OR @NameOfSubmitter IS NULL OR @NameOfSubmitter = '')
AND (LOWER(NameOfPrivacyContact) LIKE LOWER(@NameOfPrivacyContact) + '%'
OR @NameOfPrivacyContact IS NULL
OR @NameOfPrivacyContact = '')
AND (LOWER(HspOrganizationalName) LIKE LOWER(@HspOrganizationalName) + '%'
OR @HspOrganizationalName IS NULL
OR @HspOrganizationalName = '')
AND (LOWER(HspSiteNumber) LIKE LOWER(@HspSiteNumber)
OR @HspSiteNumber IS NULL OR @HspSiteNumber = '')
GROUP BY
CAST(StartedDateTime AS date)
ORDER BY
1
END
ELSE BEGIN
SELECT
CAST(DATEPART(WEEK, StartedDateTime) AS varchar(10)) Value,
COUNT(*) cnt
FROM
SubmittedSurveys
WHERE
(SurveyID = @SurveyID OR @SurveyID IS NULL)
AND (StartedDateTime >= @FromDate OR @FromDate IS NULL)
AND (StartedDateTime <= @ToDate OR @ToDate IS NULL)
AND (LOWER(ProvidedNameOfSubmitter) LIKE LOWER(@NameOfSubmitter) + '%'
OR @NameOfSubmitter IS NULL OR @NameOfSubmitter = '')
AND (LOWER(NameOfPrivacyContact) LIKE LOWER(@NameOfPrivacyContact) + '%'
OR @NameOfPrivacyContact IS NULL
OR @NameOfPrivacyContact = '')
AND (LOWER(HspOrganizationalName) LIKE LOWER(@HspOrganizationalName) + '%'
OR @HspOrganizationalName IS NULL
OR @HspOrganizationalName = '')
AND (LOWER(HspSiteNumber) LIKE LOWER(@HspSiteNumber)
OR @HspSiteNumber IS NULL OR @HspSiteNumber = '')
GROUP BY
CAST(DATEPART(WEEK, StartedDateTime) AS varchar(10))
ORDER BY
1
END
END
下面是结果
但在前端,获取值=日期,而不是周值
这是前端的代码
public static List<SubmittedSurveys> GetSurveyStatistic(int SubmittedSurveyId, DateTime
StartedDateTime, string NameOfSubmitter, string NameOfPrivacyContact, string
HspOrganizationalName, string HspSiteNumber,
DateTime CompletedDateTime,bool weekly)
{
try
{
DatabaseProviderFactory factory = new DatabaseProviderFactory();
Database _wohcDB = factory.Create("SurveyToolDBEntities");
// SqlDatabase _wohcDB = DatabaseFactory.CreateDatabase("SurveyToolDBEntities") as
SqlDatabase;
string sqlCommand = "[GetSurveyStatistic]";
DbCommand dbCommand = _wohcDB.GetStoredProcCommand(sqlCommand);
_wohcDB.AddInParameter(dbCommand, "@SurveyID", DbType.Int32, SubmittedSurveyId);
_wohcDB.AddInParameter(dbCommand, "@FromDate", DbType.DateTime, StartedDateTime);
_wohcDB.AddInParameter(dbCommand, "@ToDate", DbType.DateTime, CompletedDateTime);
_wohcDB.AddInParameter(dbCommand, "@NameOfSubmitter", DbType.String, NameOfSubmitter);
_wohcDB.AddInParameter(dbCommand, "@NameOfPrivacyContact", DbType.String, NameOfPrivacyContact);
_wohcDB.AddInParameter(dbCommand, "@HspOrganizationalName", DbType.String, HspOrganizationalName);
_wohcDB.AddInParameter(dbCommand, "@HspSiteNumber", DbType.String, HspSiteNumber);
_wohcDB.AddInParameter(dbCommand, "@weekly", DbType.String, weekly);
DataSet ds = _wohcDB.ExecuteDataSet(dbCommand);
_submittedSurvey = ReportsController.DbConverter.DataTable2List<SubmittedSurveys>(ds.Tables[0]);
//_submittedSurvey[0].SurveyReports = ReportsController.DbConverter.DataTable2List<Reports>(ds.Tables[1]);
}
catch (Exception ex)
{
string message = ex.Message.ToString();
}
return _submittedSurvey;
}
这是前端的屏幕截图,我将错误的值作为日期而不是周
有人能帮我解决这个问题吗。这太奇怪了。我也尝试在int中强制转换,但得到的错误是日期不能转换为int。我不确定为什么我在前端得到错误的数据,在后端得到正确的数据
请帮助我。尝试更改:
_wohcDB.AddInParameter(dbCommand, "@weekly", DbType.String, weekly);
致:
只要运行else部分,它就会正常工作。由于@Weekly=0,此查询将始终转到if语句。Weekly的确切值是多少?不要猜测。为什么要将DbType.String用作布尔/位?周值为53。我正在将周转换为nvarchar10。这就是为什么我在前端使用字符串。要获得53作为字符串,我指的是_wohcDB.AddInParameterdbCommand,@weekly,DbType.String,weekly;。周值是53不,不是。它的数据类型是bool bool weekly。我会再问一次-weekly的C布尔值是多少?是的,在我的例子中是这样的。正如你所说,我运行else部分只删除if-else语句。非常感谢。这只是因为你传递了错误的每周值才起作用。
_wohcDB.AddInParameter(dbCommand, "@weekly", DbType.Boolean, weekly);