Home 戻る


ああああさkjyせ¥」

SQLServerは他のサーバーに構築してある
192.1680.10

接続確認をしておく

 

VisualStudio C# フォームアプリで作成する

DataViewとコマンドボタンを付ける

なんとなく、体裁を整える

プロジェクトに、データセットを作成する


サーバー名 は、IPアドレス\インスタンス名まで含めて指定

 


今は動作確認なので、パスワードを設定ファイルでメンテしやすいようにする
ipアドレスから、勝手にHost名に置き換わっているのが気になる。

データセット名の初期値は  test_dbDataSet

できているみたいなので、データがのぞけるか?確認してみる


データが参照できれば、OK

接続文字列がどこで連携されているか、確認する。

表示されないときは、一度、ビルドを試すべし


クリックすると、設定フォームに飛ぶ

ソース的には
WindowsFormsApp1\WindowsFormsApp1\App.config
に格納されている

実行モジュール的には
bin\Debug\WindowsFormsApp1.exe.config
に格納されている

コマンドボタンクリックで、データを取得してみる

//テーブルアダプタの生成
test_dbDataSetTableAdapters.table1TableAdapter adpter = new test_dbDataSetTableAdapters.table1TableAdapter();

//読み込んだ結果を、データテーブルに入れる
test_dbDataSet.table1DataTable dt = adpter.GetData();

string s1;
string s2;
string s3;

////データテーブルからの取り出し方法その1
for (int i = 0; i < dt.Count; i++)
{
    s1 = dt[i].data1;
    s2 = dt[i].data2;
    s3 = dt[i].data3;
}

//データテーブルからの取り出し方法その2
foreach (test_dbDataSet.table1Row dr in dt)
{
    s1 = dr.data1;
    s2 = dr.data2;
    s3 = dr.data3;
}

項目名を、そのまま記載できるので、パンチミスもなくて、良いのだが、
DBNull値の場合は、キャストエラーを起こす。

test_dbDataSet.table1DataTable の中で 項目単位のアクセサが生成されており、文字列型の場合はString型に強制キャストしているからだ

数値もint?型で扱えるように、共通的な変換関数を利用する前提で、以下の方法で考えたが、
DataRow型にした関係で、項目名を文字列変数指定しているのが、苦しい。

//データテーブルからの取り出し
foreach (DataRow dr in dt)
{
    s1 = conv<string>(dr["data1"]);
    s2 = conv<string>(dr["data2"]);
    s3 = conv<string>(dr["data3"]);
}


/// <summary>
/// T型に変換します。DBNullの場合は、T型の初期値に変換します
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
private T conv<T>(object obj)
{
    if (obj == DBNull.Value || obj == null)
    {
        //T型の初期値を返す Null許容型も対応している
        return default;
    }
    else
    {
        //T型にキャストして返す
        return (T)obj;
    }
}