Ошибка преобразования типа данных nvarchar в datetime - PullRequest
0 голосов
/ 02 сентября 2010

Использование Vb.net/SQL Server 2000 для обновления строки через gridview / sqldatasource

Сохраняемая процедура:

@ISTag varchar(10),
@PCISTag varchar(10),
@User varchar(50),
@Date_Start datetime,
@Date_End datetime,
@Status varchar(50),
@Cost money,
@Notes varchar(500),
@CreatedBy varchar(50),
@ModifiedBy varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    EXEC sp_changeLog 'HardDrive', @ISTag, @ModifiedBy

    UPDATE T_HardDrive
        SET PCIStag = @PCISTag,
            [User] = @User,
            Date_Start = @Date_Start,
            Date_End = @Date_End,
            Status = @Status,
            Cost = @Cost,
            Notes = @Notes,
        ModifiedBy = @ModifiedBy
        WHERE ISTag = @ISTag

Прежде чем параметры будут переданы в SP, я должен убедиться, что он должен быть в правильном формате.

e.NewValues("Date_Start") = Convert.ToDateTime(e.NewValues("Date_Start"))

Я не понимаю, где еще это могло облажаться. Я хотел бы иметь возможность сохранить его на нулевом значении, если оно уже есть, я просто пытаюсь заставить его принять что-нибудь прямо сейчас, и вот где я нахожусь.

Ответы [ 4 ]

1 голос
/ 02 сентября 2010

используйте DateTime.TryParse для преобразования вашей строки в дату.В противном случае вы столкнетесь с проблемами локализации дат, когда люди вводят даты в DMY, MDY или YMD и т. Д.

0 голосов
/ 02 сентября 2010

Попробуйте использовать

Convert.ToDateTime(e.NewValues("Date_Start"))

с использованием провайдера формата согласно

http://msdn.microsoft.com/en-us/library/9xk1h71t.aspx

или прикрепите точку останова к e.NewValues ​​(«Date_Start») и посмотрите, что именно передается в SQL (или используйте SQL Profiler для того же).

Если вы можете опубликовать то, что передается в SP, может быть более очевидно, в чем проблема.

0 голосов
/ 02 сентября 2010

По какой-то причине для параметра установлено значение «Строка». Когда установлено правильно:

<asp:Parameter Name="Date_Start" Type="DateTime" />

Я получаю время вне диапазона ошибок, но, по крайней мере, теперь оно рассматривается как DateTime.

0 голосов
/ 02 сентября 2010

, чтобы выяснить проблему, передайте ее в значении datetime в качестве параметра varchar (n) и в процедуре, которую вы можете проверить с помощью ISDATE (Transact-SQL) , чтобы проверить, является ли она действительной или нет, даже записать плохое значение в журнал.Как только вы увидите неправильное значение, ваша проблема / решение станет более очевидной.

...