none
时间非空的写法及 引发的"该字符串为未被识别的 DateTime" 问题! RRS feed

  • 问题

  • ----    现在有一个表,其中有ContractNumber(合同号,nvarchar)、LeaseDateFrom(合同起始日,Date类型)、LeaseDateTo(合同终止日,Date类型)三个字段。我使用Textbox1对应LeaseDateFrom,Textbox2对应LeaseDateTo,外加一个GridView和一个SqldataSource,要达到的效果是一打开页面就显示全部的数据,在Textbox中输入日期后则显示符合条件的行。

    ----    有两个问题,并附上源代码。

    问题1:  对于Data类型的数据我使用的非空判断为:

     

    SELECT [ContractNumber], [LeaseDateFrom], [LeaseDateTo] 
    FROM [ContractTable] 
    WHERE (([LeaseDateFrom] >= @LeaseDateFrom OR @LeaseDateFrom = '') 
    AND ([LeaseDateTo] <= @LeaseDateTo OR @LeaseDateTo = ''))
    

     不知道这样对不对!!!

    ----问题2:使用了Date类型数据非空判断后出现了“"该字符串为未被识别的 DateTime"”的错误!!!

    下面为完整的源代码,盼望各位能给予解答,万分感谢!!!

    ===============源代码================

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ContractManage2.aspx.cs" Inherits="ContractTable_ContractManage2" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
     <table cellpadding="0" cellspacing="0" class="style1">
     <tr>
      <td>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      <asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True"></asp:TextBox>
      </td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       DataKeyNames="ContractNumber" DataSourceID="SqlDataSource1">
       <Columns>
       <asp:BoundField DataField="ContractNumber" HeaderText="ContractNumber" 
        ReadOnly="True" SortExpression="ContractNumber" />
       <asp:BoundField DataField="LeaseDateFrom" HeaderText="LeaseDateFrom" 
        SortExpression="LeaseDateFrom" />
       <asp:BoundField DataField="LeaseDateTo" HeaderText="LeaseDateTo" 
        SortExpression="LeaseDateTo" />
       </Columns>
      </asp:GridView>
      </td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
       ConflictDetection="CompareAllValues" 
       ConnectionString="<%$ ConnectionStrings:长铁物业公司资产数据库ConnectionString %>" 
       DeleteCommand="DELETE FROM [ContractTable] WHERE [ContractNumber] = @original_ContractNumber AND (([LeaseDateFrom] = @original_LeaseDateFrom) OR ([LeaseDateFrom] IS NULL AND @original_LeaseDateFrom IS NULL)) AND (([LeaseDateTo] = @original_LeaseDateTo) OR ([LeaseDateTo] IS NULL AND @original_LeaseDateTo IS NULL))" 
       InsertCommand="INSERT INTO [ContractTable] ([ContractNumber], [LeaseDateFrom], [LeaseDateTo]) VALUES (@ContractNumber, @LeaseDateFrom, @LeaseDateTo)" 
       OldValuesParameterFormatString="original_{0}" 
       SelectCommand="SELECT ContractNumber, LeaseDateFrom, LeaseDateTo FROM ContractTable WHERE (LeaseDateFrom &gt;= @LeaseDateFrom OR @LeaseDateFrom = '') AND (LeaseDateTo &lt;= @LeaseDateTo OR @LeaseDateTo = '')" 
       UpdateCommand="UPDATE [ContractTable] SET [LeaseDateFrom] = @LeaseDateFrom, [LeaseDateTo] = @LeaseDateTo WHERE [ContractNumber] = @original_ContractNumber AND (([LeaseDateFrom] = @original_LeaseDateFrom) OR ([LeaseDateFrom] IS NULL AND @original_LeaseDateFrom IS NULL)) AND (([LeaseDateTo] = @original_LeaseDateTo) OR ([LeaseDateTo] IS NULL AND @original_LeaseDateTo IS NULL))">
       <SelectParameters>
       <asp:ControlParameter ControlID="TextBox1" DbType="Date" Name="LeaseDateFrom" 
        PropertyName="Text" ConvertEmptyStringToNull="False" />
       <asp:ControlParameter ControlID="TextBox2" DbType="Date" Name="LeaseDateTo" 
        PropertyName="Text" ConvertEmptyStringToNull="False" />
       </SelectParameters>
       <DeleteParameters>
       <asp:Parameter Name="original_ContractNumber" Type="String" />
       <asp:Parameter DbType="Date" Name="original_LeaseDateFrom" />
       <asp:Parameter DbType="Date" Name="original_LeaseDateTo" />
       </DeleteParameters>
       <UpdateParameters>
       <asp:Parameter DbType="Date" Name="LeaseDateFrom" />
       <asp:Parameter DbType="Date" Name="LeaseDateTo" />
       <asp:Parameter Name="original_ContractNumber" Type="String" />
       <asp:Parameter DbType="Date" Name="original_LeaseDateFrom" />
       <asp:Parameter DbType="Date" Name="original_LeaseDateTo" />
       </UpdateParameters>
       <InsertParameters>
       <asp:Parameter Name="ContractNumber" Type="String" />
       <asp:Parameter DbType="Date" Name="LeaseDateFrom" />
       <asp:Parameter DbType="Date" Name="LeaseDateTo" />
       </InsertParameters>
      </asp:SqlDataSource>
      </td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     <tr>
      <td>
      &nbsp;</td>
      <td>
      &nbsp;</td>
     </tr>
     </table>
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    </asp:Content>
    
    

     

     


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2011年8月7日 5:22

答案

  • 試試看把ConvertEmptyStringToNull設為true,並設定初始值。

     

    <SelectParameters>
    	<asp:ControlParameter ControlID="TextBox1" Name="LeaseDateFrom" PropertyName="Text" DefaultValue="1900/01/01" ConvertEmptyStringToNull="true" DbType="DateTime" />
    	<asp:ControlParameter ControlID="TextBox2" Name="LeaseDateTo" DefaultValue="9999/12/31" ConvertEmptyStringToNull="true" PropertyName="Text" DbType="DateTime"/>
    </SelectParameters>
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月7日 5:54

全部回复

  • 試試看把ConvertEmptyStringToNull設為true,並設定初始值。

     

    <SelectParameters>
    	<asp:ControlParameter ControlID="TextBox1" Name="LeaseDateFrom" PropertyName="Text" DefaultValue="1900/01/01" ConvertEmptyStringToNull="true" DbType="DateTime" />
    	<asp:ControlParameter ControlID="TextBox2" Name="LeaseDateTo" DefaultValue="9999/12/31" ConvertEmptyStringToNull="true" PropertyName="Text" DbType="DateTime"/>
    </SelectParameters>
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月7日 5:54
  •     谢谢您的回复!这个方法我用过,确实可以解决我的问题!但并不是完美解决!

        例如:在数据库中该表只输入了ContractNumber,而LeaseDateFrom和LeaseDateTo还没有写入内容,那么在界面打开的时候就不会显示该行。因为有这种情况,所以我才提出Date类型的非空判断问题(问题1).

    ----请问要如何同时解决问题1和问题2呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月7日 6:45
  • 在Sql语句中再加上ISNULL(@LeaseDateTo,'')='1999-01-01' 就完美了!!!

    再次谢谢您的提示!3Q


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
    2011年8月7日 10:08