C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.5148 の関連記事表示

<< 0 >>
■5289  Re[8]: データベース関連処理
□投稿者/ リーベライ -(2006/08/04(Fri) 00:22:10)

    分類:[C#] 

    >staticでもすべてパラメータだけに頼って処理する以上は問題ありません。(BCLもやまほどあるでしょう?)

    クラス内の変数使うと、呼び出しかぶったときに
    その変数に何はいってるかわからないって事ですね。

    >ストアドプロシージャ内で〜〜
    それも考えたのですが、ストアドがもの凄く読みづらいものになってしまいそうだったので・・・


    みなさん、色々参考になって助かりました。

記事No.5148 のレス / END /過去ログ5より / 関連記事表示
削除チェック/

■5227  Re[7]: データベース関連処理
□投稿者/ 中華 -(2006/08/01(Tue) 15:12:55)

    分類:[C#] 

    ストアドプロシージャ内で
    IF文使って
    使用するSQLを選択する等すれば 
    コーディングが楽になることインド人が言ってました。
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5225  Re[6]: データベース関連処理
□投稿者/ 中博俊 -(2006/08/01(Tue) 12:16:44)
>

    分類:[C#] 

    Listにして返すか、Datasetで帰すかには大して意味はありません。
    DataReaderでは返せないので、Listに詰め替える必要があります。

    staticでもすべてパラメータだけに頼って処理する以上は問題ありません。(BCLもやまほどあるでしょう?)
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5220  Re[5]: データベース関連処理
□投稿者/ リーベライ -(2006/08/01(Tue) 10:03:32)

    分類:[C#] 

    なるほど。
    データセットとかを返すのではなくて、
    もうList等でDBから完全に離れた状態で返すという方法もあるんですね。

    それと今回のものとは直接関係ないのですが
    じゃんぬねっとさんのサンプルも、中博俊さんが書いてくださったサンプルも
    両方staticですよね?
    DB関連処理ってstaticで書くのが普通なんでしょうか?

    つまり私はいつもDB関連処理をまとめたクラスをつくって
    public class test {

    public DataSet Exec(コネクション,SQL文, パラメータ)
    {
    色々処理してDataSet返す
    }

    }

    みたいな感じでやってるんですが、これってstaticでも大丈夫なんでしょうか?
    というのも、Webだと大勢が同時にその処理を呼ぶと思うので
    staticだと、newしなくてもそのメソッドのインスタンスが既にあって
    大勢が呼び出すとなんか同じものを呼び出してかぶっておかしくなる?
    と思っていたので。
    まだオブジェクト指向をよく理解していないのもあるんですが・・・

    どうもstaticにしていいメソッドとそうでないメソッドの区別が
    未だよくわからないです。
    一応、staticにして問題が出ることはあると思うのですが
    外しておけば、非効率であっても、問題は起きないかなと思って
    わからない場合はつけないようにしてあるのですが。

    ちゃんと理解してつけるつけないがわかれば一番いいんですが・・・
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5194  Re[4]: データベース関連処理
□投稿者/ 中博俊 -(2006/07/29(Sat) 21:35:38)
>

    分類:[C#] 

    たとえば
    SELECT name FROM test WHERE name = @name
    のSQLを流すものとして自作するとしたら

    publics static List<string> XXX.GetName(string name)
    {
    if ( name == null )
    {
    throw new ArgumentNullException("name");
    }
    using ( SqlConnection con = new SqlConnection(XXXSetting.ConnectionStrings))
    {
    using ( SqlCommand com = new SqlCommand("SELECT name FROM test WHERE name = @name") )
    {
    〜〜〜面倒なので省略
    }
    }
    }

    このようにして、データベース層を隠蔽すべきでしょう。
    コネクションを引き回す必要がある(トランザクションのために)でなければコネクションすら引く必要がありません。

    ただ本当にケースバイケースなのは理解してください。ここに書いてあることがすべてではありませんから。

記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5193  Re[3]: データベース関連処理
□投稿者/ リーベライ -(2006/07/29(Sat) 21:16:27)

    分類:[C#] 

    >SqlDataReader executeSQL(コネクション, SQL文) {
    >あーしてこーして ExecuteReader() を返す。
    >}

    はい、SQLがパラメータを使用しない場合はそれで問題ないと私も思います。
    でも業務に限らず、DB絡む時って往々にしてパラメータ
    つまりSQLを動的に生成しますよね?
    「SELECT name FROM test WHERE name = @name」
    仮に上記のSQLを渡すと、そのexecuteSQL関数内で@nameに
    実際の値を割り当てる処理が必要かと思います。
    いつも上記のSQLであれば、固定で
    >SqlDataReader executeSQL(コネクション, SQL文, @nameにあたる文字列とか) {
    >@name = 第3引数をする処理
    >あーしてこーして ExecuteReader() を返す。
    >}
    という関数にすればよいと思いますが、これだとこのSQL専用になってしまいますよね?
    つまりこの関数に
    「SELECT name FROM test WHERE name = @name AND pass = @pass」
    を渡しても正しく動作しないという意味です。

    パラメータ割り当て済のSqlCommandを引数にして呼び出してもいいのですが
    こういうパラメータの割り当てが一番冗長というか、作業的でながったらしくなっているので
    そういうのは何かしら汎用的につくれば、関数内で全て完結する仕組みができるのかな?
    と思っていました。
    ただ私には知識と技術が無くて思いつかないだけで。

    でも中博俊さんの意見を聞いて、
    DB関連に関しては、共通化どうとかは気にしなくて
    極端に言えば、1GridViewにつき、1DB関連処理で作成してしまう(解釈あってるでしょうか?)
    という方法も結構普通に使われてるようで安心しました。

    先入観のようなものですが、プログラム=再利用・共通化
    みたいなものがあって、なんかどうしてもまとめてできないかな〜と考えてしまうので。
    そしてまとまってないと「なんだこの冗長なプログラムは」とか言われそうで・・・

    なにが正しいとかっていうのはないとは思いますので、回答というか
    「俺はこうしてるよ」っていう、経験談がとても参考になりました。

    私は今うまく共通化するような処理にできなかったので、全部それぞれ書いてるんですが
    実はそれが非常識で、「いや、普通共通化するだろ」とか言われたらどうしようかとびくびくしていました。
    .NETを扱える人が社内に自分しかいなく、評価できるような人がいませんので
    ベテランの方々の声が聞けるととても頼もしいです。
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5190  Re[2]: データベース関連処理
□投稿者/ 中博俊 -(2006/07/29(Sat) 15:28:56)
>

    分類:[C#] 

    CaseByCase過ぎるんですよね。
    とにかくSQLの周辺 Connectionだとか、Commandを取得するための処理だとか云々かんぬんを共通化することはあまり意味のある行為じゃないので私はしません。
    SQLを渡したらDataSetが帰ってくるメソッドを作成とかはそれこそTableAdapterがやるので、何も考える必要がありません。
    結局

    http://jeanne.wankuma.com/tips/sqlserver/executereader.html

    この関数を流用なんて事考えたこともないというのが答えになっているかな?
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5189  Re[1]: データベース関連処理
□投稿者/ επιστημη -(2006/07/29(Sat) 14:36:00)

    分類:[C#] 

    No5148に返信(リーベライさんの記事)
    > 理想的には、コネクションとコマンドさえ渡せば
    > 後はパラメータのセットもその呼ぶ関数の中でやってくれて
    > 結果セットだけを返すような状態にしたいのですが
    > どうやったら実現できるのかがイメージできません。

    SqlDataReader executeSQL(コネクション, SQL文) {
    あーしてこーして ExecuteReader() を返す。
    }

    でいいんじゃないのかしら?
    # SQLオンチなので外しまくってっか?

記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5188  Re[3]: データベース関連処理
□投稿者/ リーベライ -(2006/07/29(Sat) 13:50:48)

    分類:[C#] 

    >そもそもパラメータを使いましょうとか言われるに一票。
    ちょっとよく理解できなかったのですが、どういう意味でしょうか?

    >SQLを渡すだけで結果の値だけが返って来るとか…。
    はい、私もそんな感じでクラス化されてるのかなぁと思っているんですが
    サンプルでは基本的に「どうすればDBからデータを取れるか」を主眼に説明されているため
    業務で実際に使う時にどうしているかのようなサンプルってないですよね。
    それを今回聞いてみたいなと思った次第です。
    当然業務によってcase-by-caseだとは思いますが、「こんな感じでやったことがある」
    とか聞ければ、勉強になるかなと。

    >それ以前にTableAdapterをつかって、その辺のコードは書かない
    これが結構以外でした。
    簡単な表示ぐらいなら、ウィザードで作れるようなものでいいかなと思ってたんですが
    複雑なものをする時もこれを使うんでしょうか?

記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5161  Re[2]: データベース関連処理
□投稿者/ 中博俊 -(2006/07/28(Fri) 12:32:36)
>

    分類:[C#] 

    >そのDBへの接続毎に、全て一連のプログラムを毎回書いているのでしょうか?
    基本的にはそう

    それ以前にTableAdapterをつかって、その辺のコードは書かない
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5160  Re[1]: データベース関連処理
□投稿者/ KEI -(2006/07/28(Fri) 12:27:07)

    分類:[C#] 

    No5148に返信(リーベライさんの記事)
    初めましてKEIです。
    残念ながらベテランでは御座いません。。。汗
    自分が思うってだけですが、クラス化されたりしてるんではないかと…。
    SQLを渡すだけで結果の値だけが返って来るとか…。
    こちらがすごく参考になります。
    「主婦と .NET と犬の記録」http://naoko.wankuma.com/index.html
    何気に早く更新されないかと毎日訪問してます。
    なおこ(・∀・)さん。宜しくお願いしますww

記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5149  Re[1]: データベース関連処理
□投稿者/ はいこーん -(2006/07/27(Thu) 23:24:20)

    分類:[C#] 

    そもそもパラメータを使いましょうとか言われるに一票。
記事No.5148 のレス /0過去ログ5より / 関連記事表示
削除チェック/

■5148  データベース関連処理
□投稿者/ リーベライ -(2006/07/27(Thu) 23:10:46)

    分類:[C#] 


    分類:[C#] 

    初めまして。

    最近ASP.NETでWebシステムの開発を勉強中の者です。
    大体DBを使っての処理は今時当然のように絡んでくるとは思いますが
    .NETの場合、これをどういう感じで処理しているのかベテランの方の意見を聞いてみたいのです。

    どこを見ても、例えばDBからデータを取得するサンプルはここじゃんぬねっとさんのものを参考にしますと
    http://jeanne.wankuma.com/tips/sqlserver/executereader.html
    このようになっています。

    そこで、通常実際に業務でこういった処理を行う場合
    パラメータがあることが多々あると思います。
    つまり上記サンプルでいうと
    // 実行する SQL コマンドを設定する
    hCommand.CommandText = "SELECT LastName, FirstName FROM Employees";
    この辺りの部分をこの中に書いておくと、この関数は流用できません。
    よってコネクションだけでなく、コマンドも関数の外で設定して
    その二つを引数にこのサンプルのような関数を呼び出すのを考えました。
    しかしそれをすると、関数を呼び出す方の処理がかなり長くなってしまいます。

    このような場合、ベテランの方々はどうやって解決しているのでしょう?
    そのDBへの接続毎に、全て一連のプログラムを毎回書いているのでしょうか?
    例えば、上記のサンプルのような関数が
    画面で表示する部分と同じ数だけ存在するのでしょうか?

    理想的には、コネクションとコマンドさえ渡せば
    後はパラメータのセットもその呼ぶ関数の中でやってくれて
    結果セットだけを返すような状態にしたいのですが
    どうやったら実現できるのかがイメージできません。

    上手く説明できませんが、ようは実際の業務で使用する際
    データベースへの問い合わせ処理はどのようにしてまとめているでしょう?
    ということになるかなと思います。
親記事 /0過去ログ5より / 関連記事表示
削除チェック/

■5148  Re[5]: From1からFrom2への構造体渡し
□投稿者/ HiJun -(2007/07/05(Thu) 16:34:57)
    2007/07/05(Thu) 16:37:17 編集(投稿者)
    2007/07/05(Thu) 16:36:43 編集(投稿者)

    No5146 (◎ さん) に返信
    > Form2.xxxx ではないですかね?
    > 試してみたことがないのであっているのかわかりません…

    正解ですよ。そのメソッドの引数に構造体をセットするだけです。
    後は、そのForm2のメソッド内の処理にて引数をいじくり倒せばOKです。
    例.
    Form2.xxxx(構造体)
記事No.5139 のレス /過去ログ15より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -