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

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

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

全過去ログを検索

<< 0 >>
■8668  VB6クラスから.NETへの変換
□投稿者/ キラ -(2007/10/05(Fri) 16:32:01)

    分類:[.NET 全般] 

    VB6でORACLE接続に関する部分をクラス化してました。
    それをVB.NET若しくはC#で同様なクラスを作成したいと思っているのですが、
    参考になるサイトなどが無くどのように書き換えればいいのか
    まったく判りません。

    わかる方がいましたら教えて頂きたく宜しくお願い致します


    VB6のクラス

    Private G_OraSs As Object 'Oracleセクション
    Private G_OraDb As Object 'Oracleデータベース
    Private G_OraRs As Object 'Oracleダイナセット

    'プロパティ(読み取り専用)
    Private LFieldCount As Long 'SQLのフィールド数
    Private LRecordCount As Long 'SQLのレコード数

    '#######################[ property ]############################
    Public Property Get FieldCount() As Long
    FieldCount = LFieldCount
    End Property

    Public Property Get RecordCount() As Long
    RecordCount = LRecordCount
    End Property

    '########################[ events ]############################

    '{Oracleデータベースに接続}
    Public Function DBOpen(OraDatabaseName As String, _
    OraUserName As String, _
    OraPassword As String) As Boolean

    DBOpen = True '正常終了時の戻り値

    On Error Resume Next 'Error無視

    'Oracleセッション参照作成
    Set G_OraSs = CreateObject("OracleInProcServer.XOraSession")

    If Err <> 0 Then '接続失敗したら
    DBOpen = False 'エラー戻り値セット
    Else '接続成功したら
    '指定OracleDBオープン
    Set G_OraDb = G_OraSs.OpenDatabase(OraDatabaseName, OraUserName & "/" & OraPassword, 0&)

    If Err <> 0 Then 'DBオープンが失敗したら
    DBOpen = False 'エラー戻り値セット
    End If
    End If

    On Error GoTo 0

    End Function

    '{SQL実行 update, add}
    Public Function SQL_Updata(ByVal strSql As String) As Boolean

    Dim Record As Variant
    Dim flg As Boolean

    On Error GoTo AddUpErr

    flg = True '成功
    G_OraSs.BeginTrans
    Record = G_OraDb.dbexecutesql(strSql)
    G_OraSs.CommitTrans 'コミット
    'G_OraSs.Rollback 'ロールバック

    exitExec:
    SQL_Updata = flg
    Exit Function

    AddUpErr:
    flg = False
    Resume exitExec:

    End Function

    '{SQL実行 select}
    Public Function SQL_Run(ByVal strSql As String) As Long

    Dim i As Integer 'カウンタ
    Dim f_count As Integer 'SQLのフィールド数
    Dim line As String 'カンマ文字列
    Dim edpno As String
    Dim ItemNo As Integer
    Dim tmp As String


    On Error Resume Next

    LRecordCount = 0

    Set G_OraRs = G_OraDb.CreateDynaset(strSql, 0&) '参照クエリーを実行(レコードセットが帰る)

    If Err <> 0 Then '実行失敗?
    G_OraRs.Close 'レコードをクローズ
    Else '実行成功
    If G_OraRs.EOF = False Then 'データあり?
    LFieldCount = G_OraRs.Fields.Count 'フィールド数
    LRecordCount = G_OraRs.RecordCount 'レコード数
    G_OraRs.MoveLast 'カーソル全移動して
    G_OraRs.MoveFirst 'カーソルを確定
    End If
    End If

    SQL_Run = LRecordCount '結果を返す

    End Function

    'ダイナセットクリア
    Public Sub DynasetClear()
    'G_OraRs.Clear
    Set G_OraRs = Nothing
    End Sub


    ■特にこの部分が知りたいです
     データの前後を取りたいときなどがあるため、このような方法は必須なんです
    '指定されたレコードを返す
    Public Function ItemCells(ARow As Long, acol As Long) As String

    On Error GoTo ItemErr

    G_OraRs.MoveTo (ARow)
    ItemCells = CStr(G_OraRs.Fields(acol).Value)

    Exit Function

    ItemErr:
    ItemCells = vbNullString

    End Function

    '指定されたフィールド名を取得
    Public Function FieldName(ACool As Long) As String

    On Error GoTo Err_Filed

    FieldName = G_OraRs.FieldName(ACool)
    Exit Function

    Err_Filed:
    FieldName = ""

    End Function

    'レコードセットクローズ
    Public Sub RecordSetClose()

    On Error Resume Next
    G_OraRs.Close
    Set G_OraRs = Nothing
    End Sub

    '{Oracle切断}
    Public Sub DBClose()

    On Error Resume Next

    Call RecordSetClose

    G_OraDb.Close
    Set G_OraDb = Nothing

    Set G_OraSs = Nothing

    On Error GoTo 0

    End Sub





親記事 /過去ログ20より / 関連記事表示
削除チェック/

■35408  Re[1]: DataGridViewの行にComboBoxは表示可能?
□投稿者/ やじゅ -(2009/04/28(Tue) 19:48:18)
>
    No35407 (プリ太 さん) に返信
    > DataGridViewに1行飛ばしでConboBox行を表示したいのですが、
    > DataGridViewComboBoxColumnのRow版のようなものはないのでしょうか?
    > 自力でつくるしかないのでしょうか?
    >

    自力でつくる感じでしょうかね。値を見ながら、CellPainting あたりで。 
    近いのだと・・・ DataGridViewボタン列で行毎に表示、非表示にするには
    http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200701/200701_07010062.html
記事No.35407 のレス /過去ログ61より / 関連記事表示
削除チェック/

■44307  C#でbatファイル実行
□投稿者/ ヤス -(2009/12/04(Fri) 17:34:55)

    分類:[C#] 

    VisualC#上でbatファイルを実行させたいと思っております。

    batファイルの中身は

     randinit -din inp.dat -cout inpi.cod -xdim 100 -ydim 100 -topol rect -neigh bubble -rand 123
     vsom -din inp.dat -cin inpi.cod -cout inp2.cod -rlen 10000 -alpha 0.5 -radius 100 -rand 1
     vcal -din inp.dat -cin inpi.cod -cout inpiv.cod
     vcal -din inp.dat -cin inp2.cod -cout inp2v.cod -numlabs 100umat -cin inpiv.cod -ps -o inpiv.ps
     umat -cin inp2v.cod -ps -o inp2v.ps

    となっております。普通に実行はできます。

    しかしプログラム上で、

     string stExeName = @"c:\\aaa\\bbb\\test.bat";
     Process pro = new Process();
     pro.StartInfo.UseShellExecute = false;
     pro.StartInfo.RedirectStandardOutput = true;
     pro.StartInfo.CreateNoWindow = true;
     pro.StartInfo.FileName = stExeName;
     pro.Start();



     string stExeName = @"c:\\aaa\\bbb\\test.bat";
     Process pro = new Process();
     pro.StartInfo.UseShellExecute = false;
     pro.StartInfo.RedirectStandardOutput = true;
     pro.StartInfo.CreateNoWindow = true;
     pro.StartInfo.FileName = @"C:\WINDOWS\system32\cmd.exe";
     pro.StartInfo.Arguments = stExeName;
     pro.Start();

    と書いても、実行されません。
    ただ実行するだけでいいのですが… お教えいただけると有り難いです。

親記事 /過去ログ75より / 関連記事表示
削除チェック/

■54795  Re[1]: コンパイルしたexeファイルのアイコンを変更したい
□投稿者/ 魔界の仮面弁士 -(2010/11/02(Tue) 13:56:30)
    No54792 (poit さん) に返信
    > プロジェクトプロパティの実行可能ファイルの作成タブで、アイコンのところで設定するのだと思うのですが、
    > form1としか選択出来ませんがどうすれば良いですか?ハードディスク内のアイコンファイルを選択するのですよね。

    基本的には、Form の Icon プロパティにアイコンをセットしておき、
    コンパイル時に、どのフォームのアイコンを使うかを指定することになります。


    フォームのものとは違うアイコンを使いたい場合や、そもそもフォームが無い場合には、
    「VB6 リソース エディタ アドイン」を使って、リソースファイルにアイコンを含めておき、
    そのアイコンのIDを「APPICON」という文字列にしておけば OK です。

    http://support.microsoft.com/kb/291569/ja
記事No.54792 のレス /過去ログ92より / 関連記事表示
削除チェック/

■91569  Re[16]: メモリリークに関して
□投稿者/ kiku -(2019/07/08(Mon) 11:36:04)
    No91546 (kiku さん) に返信
    > ここまでの情報や実験結果を用いてどのように対処していくのか
    > 方向性を出したいと思っています。
    > 少し考えさせてください。
    
    下記のような対応にて、様子を見ることになりました。
    Font.Dispose()については、意味がないことを説明したのですが、
    ご理解得ることはできなかったため、実装しています。
    実装しても弊害が発生することはないと思いますので。
    結果が出るまでに、時間がかかると思いますので
    ここで解決済みとします。
    
        partial class Test
        {
            private System.ComponentModel.IContainer components = null;
    
            protected override void Dispose(bool disposing)
            {
                CustomDispose.Dispose(this.Controls);//★対策追加
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private void InitializeComponent()
            {
                this.lbl_serialnumber = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // lbl_serialnumber
                // 
                this.lbl_serialnumber.BackColor = System.Drawing.Color.White;
                this.lbl_serialnumber.Font = new System.Drawing.Font("MS ゴシック", 16F, System.Drawing.FontStyle.Bold);
                this.lbl_serialnumber.Location = new System.Drawing.Point(5, 115);
                this.lbl_serialnumber.Name = "lbl_serialnumber";
                this.lbl_serialnumber.Size = new System.Drawing.Size(310, 20);
                this.lbl_serialnumber.Text = "lbl_serialnumber";
                // 
                // Test
                // 
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
                this.ClientSize = new System.Drawing.Size(640, 480);
                this.ControlBox = false;
                this.Controls.Add(this.lbl_serialnumber);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "Test";
                this.Text = "Test";
                this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                this.ResumeLayout(false);
            }
    
            private System.Windows.Forms.Label lbl_serialnumber;
        }
    
        //★ここ以降対策追加
        public class CustomDispose
        {
            static public void Dispose(Control.ControlCollection Controls)
            {
                foreach (var c in Controls)
                {
                    Logger.Info(c.GetType().ToString());
                    switch (c.GetType().FullName)
                    {
                        case "System.Windows.Forms.Label":
                            ((System.Windows.Forms.Label)c).Font.Dispose();
                            ((System.Windows.Forms.Label)c).Dispose();
                            break;
                        //ここにTextBoxなどの他のコントロールも多数存在する。
                        //ここにカスタムコントロールも多数存在する。
                        default:
                            //●解放漏れの可能性あり●
                            break;
                    }
                }
            }
        }
    
    
記事No.91509 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91571  Re[17]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 -(2019/07/08(Mon) 14:19:34)
    No91569 (kiku さん) に返信
    > foreach (var c in Controls)
    > {
    >     Logger.Info(c.GetType().ToString());
    >     switch (c.GetType().FullName)
    >     {
    >         case "System.Windows.Forms.Label":
    >             ((System.Windows.Forms.Label)c).Font.Dispose();
    >             ((System.Windows.Forms.Label)c).Dispose();
    
    型ではなく型名でチェックしている点が気になりますが、それはさておき。
    
    
    Form 上に Panel や TabControl 等を使用していた場合、this.Controls だけではなく
    その配下のコントロールも再帰的に処理する必要があるのではないでしょうか。
    (this.Controls[0].Controls 的な意味で)
    
    https://stackoverflow.com/questions/2209854/find-all-child-controls-of-specific-type-using-enumerable-oftypet-or-linq
    
    
    
    > protected override void Dispose(bool disposing)
    > {
    >     CustomDispose.Dispose(this.Controls);//★対策追加
    >     if (disposing && (components != null))
    >     {
    >         components.Dispose();
    >     }
    >     base.Dispose(disposing);
    > }
    
    マネージリソースを破棄するのは、disposing == true の時だけなのでは?
    
    # 一応、解決済みマークはつけたままにしておきます。
記事No.91509 のレス / END /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -