none
Formviewで空データをAccessデータベースに登録した後、読み込み時に出るエラーの回避方法 RRS feed

  • 質問

  •  

    お世話になっております。

    タイトル表記のとおり、Formviewで空データをAccessデータベースに登録した後、読み込み時に出るエラーの回避方法が

    わからず困っています。

     

    FormviewでTextBoxを使い、文字を入力してDBに登録するのですが、その際に未入力で更新すると、

    その後の読み込み(Bindでデータ表示しています)で「型 'DBNull' から型 'String' への変換は無効です。」

    のエラーが発生します。

     

    知りたいことは、

    1.空データを登録するときにDBNULLではなく””で登録させたい

    2.DBNULLを読み込んだときに文字列を空白などに変換させてエラーを回避したい

     

    以上2点です。どうぞご教授のほどよろしくお願いします。

     

     

    2008年6月18日 6:53

回答

  •  さとちゃん222 さんからの引用

    1.空データを登録するときにDBNULLではなく””で登録させたい

    2.DBNULLを読み込んだときに文字列を空白などに変換させてエラーを回避したい

     

    1.に関して手っ取り早いのは、テーブルの規定値を空文字にしてしまうことです。他の方法としては、insert文をその列に空文字を保存するように修正しても良いでしょう。

     

    2.こちらで試したところ、mdbのテーブルでnullでもBindでTextBoxには空白で適切に表示されますが、何か特別なことをされていますか?
    とりあえず対処方法としては以下が参考になると思います。

     

    データ ソース コントロールを使用した、データベースの Null 値の処理
    http://msdn.microsoft.com/ja-jp/library/ms366709(VS.80).aspx

    2008年6月19日 2:08
    モデレータ
  •  trapemiya さんからの引用

      2.こちらで試したところ、mdbのテーブルでnullでもBindでTextBoxには空白で適切に表示されますが、何か特別なことをされていますか?

     

    お返事ありがとうございます。

     

    エラーが出る部分は、以下の書き方をしております。

    <asp:Label ID="Label1" runat="server" Text='<%# ShowWithLineBreaks(Eval("oshirase")) %>'>
     

    Bindではなく、ShowWithLineBreaksを使い、VbCrLfを<br>に変換しています。

    Bindに直すと空白で表示されました。

    問題点はやはりここでしょうか。

     

    改行コードを変換して表示したいので、いい方法がありましたらよろしくお願いします。

     

    2008年6月19日 6:33
  • Access mdbの場合、mdb属性として「未入力を許可する」という設定があるはずです。 アプリケーションでmdbを定義すると、それがFalseになっている場合があります。 mdbのプロパティをご確認ください。
    2008年6月19日 6:38
  •  葉流奈津 さんからの引用
    Access mdbの場合、mdb属性として「未入力を許可する」という設定があるはずです。 アプリケーションでmdbを定義すると、それがFalseになっている場合があります。 mdbのプロパティをご確認ください。

     

    お返事ありがとうございます。

     

    未入力の設定はtrueになっており、規定値は””に設定してありますが、やはりエラーが出ます。

    Bindでは問題ないのですが、ShowWithLineBreaksを使うとエラーになります。

    使わないほうがいいのでしょうか・・・。

    2008年6月19日 7:16
  • ShowWithLineBreaksって独自定義ですよね?

    その引数をStringからObjectに変えればいいと思いますよ。

    中の処理については、trapemiyaさんの紹介されてるサイトの下のほうを参考にしてください。

     

    それがいじれないとすると、IIFでDBNull.Valueを空文字に変換してShowWithLineBreaksに渡すとか、

    さらにもう一つ独自定義の関数作ってその中でShowWithLineBreaksに渡すとか。

    2008年6月19日 8:22
  • お返事ありがとうございました。

     

    皆様の助言のおかげで、無事表示、更新ができるようになりました。

     

    どうもありがとうございました。もっと勉強いたします。。

    2008年6月20日 0:51

すべての返信

  •  さとちゃん222 さんからの引用

    1.空データを登録するときにDBNULLではなく””で登録させたい

    2.DBNULLを読み込んだときに文字列を空白などに変換させてエラーを回避したい

     

    1.に関して手っ取り早いのは、テーブルの規定値を空文字にしてしまうことです。他の方法としては、insert文をその列に空文字を保存するように修正しても良いでしょう。

     

    2.こちらで試したところ、mdbのテーブルでnullでもBindでTextBoxには空白で適切に表示されますが、何か特別なことをされていますか?
    とりあえず対処方法としては以下が参考になると思います。

     

    データ ソース コントロールを使用した、データベースの Null 値の処理
    http://msdn.microsoft.com/ja-jp/library/ms366709(VS.80).aspx

    2008年6月19日 2:08
    モデレータ
  •  trapemiya さんからの引用

      2.こちらで試したところ、mdbのテーブルでnullでもBindでTextBoxには空白で適切に表示されますが、何か特別なことをされていますか?

     

    お返事ありがとうございます。

     

    エラーが出る部分は、以下の書き方をしております。

    <asp:Label ID="Label1" runat="server" Text='<%# ShowWithLineBreaks(Eval("oshirase")) %>'>
     

    Bindではなく、ShowWithLineBreaksを使い、VbCrLfを<br>に変換しています。

    Bindに直すと空白で表示されました。

    問題点はやはりここでしょうか。

     

    改行コードを変換して表示したいので、いい方法がありましたらよろしくお願いします。

     

    2008年6月19日 6:33
  • Access mdbの場合、mdb属性として「未入力を許可する」という設定があるはずです。 アプリケーションでmdbを定義すると、それがFalseになっている場合があります。 mdbのプロパティをご確認ください。
    2008年6月19日 6:38
  •  葉流奈津 さんからの引用
    Access mdbの場合、mdb属性として「未入力を許可する」という設定があるはずです。 アプリケーションでmdbを定義すると、それがFalseになっている場合があります。 mdbのプロパティをご確認ください。

     

    お返事ありがとうございます。

     

    未入力の設定はtrueになっており、規定値は””に設定してありますが、やはりエラーが出ます。

    Bindでは問題ないのですが、ShowWithLineBreaksを使うとエラーになります。

    使わないほうがいいのでしょうか・・・。

    2008年6月19日 7:16
  • ShowWithLineBreaksって独自定義ですよね?

    その引数をStringからObjectに変えればいいと思いますよ。

    中の処理については、trapemiyaさんの紹介されてるサイトの下のほうを参考にしてください。

     

    それがいじれないとすると、IIFでDBNull.Valueを空文字に変換してShowWithLineBreaksに渡すとか、

    さらにもう一つ独自定義の関数作ってその中でShowWithLineBreaksに渡すとか。

    2008年6月19日 8:22
  • お返事ありがとうございました。

     

    皆様の助言のおかげで、無事表示、更新ができるようになりました。

     

    どうもありがとうございました。もっと勉強いたします。。

    2008年6月20日 0:51