none
DropDownList生年月日を「NULL」でDB格納できませんか? RRS feed

  • 質問

  • FormViewで顧客情報を登録するWebフォームを開発しております。
    よくある「生年月日」のDropDownList項目があるのですが、

    【<asp:ListItem Value="">未選択</asp:ListItem>】
    でDBに登録しようとすると「0」がDBに格納されます。

    DBの型はINT型です。
    (もしかしたらですが「NULL」は自動的に「0」にキャストされてるのではないでしょうか。)

    ただ「0」という日付は存在しないので気持ちが悪いです。
    「0」ではなく「NULL」でDBに格納したいのです。

    【<asp:ListItem Value="NULL">未選択</asp:ListItem>】
    上記のようにしてみたら、
    「nvarchar の値 'null' をデータ型intに変換できませんでした。」とエラーが表示されます。

    どうしたらよいでしょうか?
    ご教授頂けますでしょうか。

    ------------------------------------------------------
    <tr><th>【生年月日】日</th>
    <td>
    <asp:DropDownList ID="BirthDateDropDownList"
     runat="server"
     SelectedValue='<%# Bind("BirthDate")%>' >
      <asp:ListItem Value="">未選択</asp:ListItem>
      <asp:ListItem Value="1">1</asp:ListItem>
      <asp:ListItem Value="2">2</asp:ListItem>
      <asp:ListItem Value="3">3</asp:ListItem>
      <asp:ListItem Value="4">4</asp:ListItem>
      <asp:ListItem Value="5">5</asp:ListItem>
      <asp:ListItem Value="6">6</asp:ListItem>
      <asp:ListItem Value="7">7</asp:ListItem>
      <asp:ListItem Value="8">8</asp:ListItem>
      <asp:ListItem Value="9">9</asp:ListItem>
      <asp:ListItem Value="10">10</asp:ListItem>
      <asp:ListItem Value="11">11</asp:ListItem>
      <asp:ListItem Value="12">12</asp:ListItem>
      <asp:ListItem Value="13">13</asp:ListItem>
      <asp:ListItem Value="14">14</asp:ListItem>
      <asp:ListItem Value="15">15</asp:ListItem>
      <asp:ListItem Value="16">16</asp:ListItem>
      <asp:ListItem Value="17">17</asp:ListItem>
      <asp:ListItem Value="18">18</asp:ListItem>
      <asp:ListItem Value="19">19</asp:ListItem>
      <asp:ListItem Value="20">20</asp:ListItem>
      <asp:ListItem Value="21">21</asp:ListItem>
      <asp:ListItem Value="22">22</asp:ListItem>
      <asp:ListItem Value="23">23</asp:ListItem>
      <asp:ListItem Value="24">24</asp:ListItem>
      <asp:ListItem Value="25">25</asp:ListItem>
      <asp:ListItem Value="26">26</asp:ListItem>
      <asp:ListItem Value="27">27</asp:ListItem>
      <asp:ListItem Value="28">28</asp:ListItem>
      <asp:ListItem Value="29">29</asp:ListItem>
      <asp:ListItem Value="30">30</asp:ListItem>
      <asp:ListItem Value="31">31</asp:ListItem>
    </asp:DropDownList>
    ------------------------------------------------------
    ----
    ▼開発環境
    Webアプリケーションです。
    .Net Flamework4.0
    C#
    Visual Studio 2010
    SQL Server 2008 R2

    2012年6月26日 11:28

回答

  • > SelectedValue='<%# Bind("BirthDate")%>' >
    >   <asp:ListItem Value="">未選択</asp:ListItem>

    BirthDate 列は NULL 許可になってますか?

    Parameter の ConvertEmptyStringToNull を false にするとか(デフ
    ォルトで true)普通でないことをしてませんか?

    NULL 許可になっていて(不許可の場合は試してないので不明)、デ
    ータバインドコントロールに SqlDataSource を使ってウィザードベー
    スで(即ちすべてデフォルト設定で)作ったのであれば、空白文字 ""
    は自動的に NULL に変換されて DB の当該フィールドに格納されるはず
    です。


    • 編集済み SurferOnWww 2012年6月26日 14:30 誤字訂正
    • 回答としてマーク ミルズ 2012年6月26日 15:29
    2012年6月26日 14:30

すべての返信

  • > SelectedValue='<%# Bind("BirthDate")%>' >
    >   <asp:ListItem Value="">未選択</asp:ListItem>

    BirthDate 列は NULL 許可になってますか?

    Parameter の ConvertEmptyStringToNull を false にするとか(デフ
    ォルトで true)普通でないことをしてませんか?

    NULL 許可になっていて(不許可の場合は試してないので不明)、デ
    ータバインドコントロールに SqlDataSource を使ってウィザードベー
    スで(即ちすべてデフォルト設定で)作ったのであれば、空白文字 ""
    は自動的に NULL に変換されて DB の当該フィールドに格納されるはず
    です。


    • 編集済み SurferOnWww 2012年6月26日 14:30 誤字訂正
    • 回答としてマーク ミルズ 2012年6月26日 15:29
    2012年6月26日 14:30
  • ご指摘ありがとうございます。

    おっしゃる通りで、

    Parameter の ConvertEmptyStringToNull の設定で解決する事が出来ました。

    お手数をお掛けしまして、申し訳ございません。

    ありがとうございました。

    2012年6月26日 15:28