C#Web服务将字符串转换为DateTime并插入SQL

时间:2016-05-31 03:06:38

标签: c# sql datetime

尝试通过C#将日期和其他一些字符串数据插入到SQL中,如下所示:

OperationResponse ICommon.addUser(userRequest request)
    {
        int? result = 0;
        Guid countryGUID;

        string requestParent = request.parent;
        string requestName = request.name;
        string requestSchool = request.school;
        int requestGender = request.gender;
        DateTime dateTimeDOB = DateTime.ParseExact(request.DOB, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
        string requestEmail = request.email;
        string requestMobile = request.mobile;
        Guid.TryParse(request.countryID, out countryGUID);
        string requestInstitution = request.institution;

        try
        {
            result = s2u.AddUser(request.parent, request.name, request.school, request.gender, dateTimeDOB, request.email, request.mobile, countryGUID, request.institution);
        }
        catch (Exception ex)
        {

            if (isDebug() == true)
            {
                return new OperationResponse(ex.Message);
            }
            else
            {
                return new OperationResponse("Error: Database inaccessible.");
            }
        }

        if (result == 1)
        {
            return new OperationResponse();
        }
        else
        {
            return new OperationResponse("Error: User could not be added.");
        }
    }

然而,每当我尝试在Fiddler中运行它时,它到目前为止都没有成功,因为结果总是最终为-1。

我怀疑这可能与DOB未正确插入有关,但我无法确定。我试图解析的request.DOB是一个字符串,SQL表中的DOB列有date数据类型,我试图以" yyyy-的格式传递日期MM-dd",但在C#方面,我也要传递时间,默认情况下是12.00.00 AM。我不知道这是否会导致问题。我们非常感谢您的帮助,如果需要,我会提供更多详细信息。

编辑:AddUser存储过程如下:

ALTER PROCEDURE [dbo].[AddUser]
    -- Add the parameters for the stored procedure here
    @parent nvarchar(300),
    @name nvarchar(300),
    @school nvarchar(500),
    @gender int,
    @DOB datetime2(7),
    @email nvarchar(500),
    @mobile nvarchar(20),
    @countryID uniqueidentifier,
    @institution nvarchar(500)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO [dbo].[Users] ([parent], [name], [school], [gender], [DOB], [email], [mobile], [countryID], [institution])
    VALUES (@parent, @name, @school, @gender, @DOB, @email, @mobile, @countryID, @institution);
END

1 个答案:

答案 0 :(得分:0)

检查字符串日期时间是否正确。我相信它的格式不正确。

此外,你为什么不使用以下方法?

DateTime dt = Convert.ToDateTime(dateTime);

使用EF,datetime主要作为datetime2类型处理,因此不会产生太大影响或造成任何麻烦。

此外,使用try& amp;编写存储过程中的事务句柄。抓住并试图找出是否有任何问题。