えムナウ Blog

えムナウ の ありのまま

AILight Banner
AILight Blog

プロフィール

えムナウ Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

TableAdapter は使いにくいのか?

最近Blogにて以下のような記述を目にしたので試してみました。

TableAdapterを利用してReturnValueを得る方法がない。
http://blogs.wankuma.com/naka/archive/2005/11/06/19071.aspx

TableAdapterはデザイン画面が作り上げたもので、細かい設定はできない。
http://blogs.wankuma.com/trapemiya/archive/2005/11/08/19158.aspx

データセットの hogeDataSet.xsd をクリックしてコードの表示で hogeDataSet.cs が表示される。
以下のコーディングを追加すると ReturnValue は取得できます。
これも partial のおかげですね。 結構細かいことも出来ると思います。

hogeDataSet.cs に追加。
namespace DataTableAdapterTips.hogeDataTableAdapters
{
 public partial class hogeDataTableAdapter
 {
  public int? ReturnValue
  {
   get
   {
    object returnvalue = this.CommandCollection[0].Parameters["@RETURN_VALUE"].Value;
    if (returnvalue == null || returnvalue == System.Convert.DBNull) return null;
    return (int)returnvalue;
   }
  }
 }
}

こんな呼び方をします。
Fillメソッドを呼ぶ前は ret は null が帰ります。

hogeDataTableAdapter1.Fill(hogeDataSet1.hogeDataTable);
int? ret = hogeDataTableAdapter1.ReturnValue;

投稿日時 : 2005年11月9日 16:35


コメントを追加

#  re: TableAdapter は使いにくいのか? 2005年11月9日 16:50 えムナウ

Parameters["@RETURN_VALUE"].Value は正しくは Int32 です。
public Int32? ReturnValue とかに読み替えてください。

#  re: TableAdapter は使いにくいのか? 2005年11月9日 19:25 trapemiya

なるほど。勉強になります。ようやく見えてきました。(おぃ
後日いろいろ試してみます。今日は風邪でダウンです。orz

ところで、せっかく?が使えるので、
get
{
 int? returnvalue = this.CommandCollection[0].Parameters["@RETURN_VALUE"].Value;
 return returnvalue;
}
でいいような気がします。(未検証)

#  re: TableAdapter は使いにくいのか? 2005年11月9日 20:38 えムナウ

以下の条件(ありえない可能性もありますが)が怖かったので・・・
returnvalue == System.Convert.DBNull

#  re: TableAdapter は使いにくいのか? 2005年11月9日 23:51 中博俊

もはやTableAdapterなしには戻れないくらい大好きですよ。
ただ、この解答例実はとっても致命的
[0]は保障されていないのです。
コレを保障するためにはTableAdapterを別々にこさえる必要がありますが、テーブル型にならないものに関してはstaticメソッド風に1つのTAに入れるべきだと思います。
と、思うと、やっぱり[0]は無理なわけで・・・

まぁ私はストアドにselect @retvalをかます方を選びます。(^^

#  re: TableAdapter は使いにくいのか? 2005年11月10日 0:44 えムナウ

たしかに CommandCollection[0] は保証ないです。
hogeDataSet.Designer.cs と hogeDataSet.cs はセットと考えて、hogeDataSet.Designer.cs をよく見て CommandCollection の順序を Enum にしておくぐらいでしょう。

自動化はメンテナンスフリーでは使えないことを認識していれば逆に使えるんじゃないでしょうか。

select @retval を加えて SELECTを2つにすると、ウィザードでは作れません。

答えをひとつだけ返すんであれば関数で十分ですね。
関数ならばreturnvalueは戻ってきます。
タイトル
名前
URL
コメント