2010-09-02 108 views
0

解决“将数据类型nvarchar转换为日期时间”错误后得到此解决方案。使用Vb.net/SQL Server 2000中通过一个gridview/SqlDataSource的更新一行:对象必须实现IConvertible?

存储过程:

@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; 

    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 

SQL数据源:

<asp:SqlDataSource ID="InventoryHardDrive" runat="server" 
         ConnectionString="<%$ ConnectionStrings:InventoryConnectionString %>" 
         DeleteCommand="DELETE FROM [T_HardDrive] WHERE [ISTag] = @original_ISTag" 
         InsertCommand="sp_HardDriveInsert" InsertCommandType="StoredProcedure" 
         OldValuesParameterFormatString="original_{0}" 
         SelectCommand="sp_HardDriveSelect" SelectCommandType="StoredProcedure" 
         UpdateCommand="sp_HardDriveUpdate" UpdateCommandType="StoredProcedure"> 
         <DeleteParameters> 

         </DeleteParameters> 
         <InsertParameters> 
          <asp:Parameter Name="ISTag" Type="String" /> 
          <asp:Parameter Name="PCISTag" Type="String" /> 
          <asp:Parameter Name="User" Type="String" /> 
          <asp:Parameter Name="Date_Start" Type="DateTime" /> 
          <asp:Parameter Name="Date_End" Type="DateTime" /> 
          <asp:Parameter Name="Status" Type="String" /> 
          <asp:Parameter Name="Cost" Type="Decimal" /> 
          <asp:Parameter Name="Notes" Type="String" /> 
          <asp:Parameter Name="CreatedBy" Type="String" /> 
          <asp:Parameter Name="ModifiedBy" Type="String" /> 
         </InsertParameters> 
         <SelectParameters> 
          <asp:ControlParameter ControlID="hideInactiveCheckBox" Name="Active" 
           PropertyName="Checked" Type="Boolean" /> 
          <asp:ControlParameter ControlID="filterText" DefaultValue="%" Name="ISTag" 
           PropertyName="Text" Type="String" /> 
         </SelectParameters> 
         <UpdateParameters> 
          <asp:Parameter Name="ISTag" Type="String" /> 
          <asp:Parameter Name="PCISTag" Type="String" /> 
          <asp:Parameter Name="User" Type="String" /> 
          <asp:Parameter Name="Date_Start" Type="DateTime" /> 
          <asp:Parameter Name="Date_End" Type="DateTime" /> 
          <asp:Parameter Name="Status" Type="String" /> 
          <asp:Parameter Name="Cost" Type="Decimal" /> 
          <asp:Parameter Name="Notes" Type="String" /> 
          <asp:Parameter Name="CreatedBy" Type="String" /> 
          <asp:Parameter Name="ModifiedBy" Type="String" /> 
         </UpdateParameters> 
        </asp:SqlDataSource> 

我设置的DATE_START和DATE_END参数设置为现在的最短日期,直到我可以找出造成这种情况的原因。

Dim sqldatenull As SqlDateTime 
sqldatenull = SqlDateTime.MinValue 
e.NewValues("Date_Start") = sqldatenull 
e.NewValues("Date_End") = sqldatenull 

任何想法?

+0

我想你需要转换为SQL日期类型,它可能适用于更高版本的SQL服务器 – 2010-09-02 16:45:55

+0

DateTime是2000年的一种类型,所以我不认为这是问题? – Shawn 2010-09-02 16:52:22

回答

1

您是否尝试过在VB.NET代码中使用DateTime而不是SqlDateTime

+0

禁用对sp_changeLog的调用,不更改。 – Shawn 2010-09-02 16:56:02

+0

更改为DateTime工作!你会认为SqlDateTime是兼容的吗?确实很奇怪。 – Shawn 2010-09-02 16:56:26

+0

对不起,编辑我的答案就像你回答。 – codeulike 2010-09-02 16:56:47

相关问题