C# とSQL serverで簡単なデータベースソフトを作るのですが、

配列のデータをテーブルに作る場合は
どうすればよいでしょうか?

「sql server 配列」でいろいろ検索してみたのですがよく分かりませんでした。

解決した場合は500ポイント差し上げますので分かりやすい解説をお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2007/09/19 07:28:26
  • 終了:2007/09/19 11:27:41

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/09/19 09:29:25

ポイント500pt

PostgreSQL などでは データ型として配列をサポートしていますが、SQLServer はそういった型は無いので、処理により複数のデータを扱うよう対応する必要があります。

配列を個々のテーブルデータとして管理する方法もありますが、操作が面倒になるので今回はC#側でデータを処理する案を提示いたします。


まず配列データを格納するときに

   string arrayData = {"apple", "orange", "banana"};
   string joinedData = string.Join(",", arrayData );
   MessageBox.Show( joinedData );

のように結合し、一つの文字列としてデータを格納します。


逆にデータベースから取り出した後では、

   string[] arrayData = joinedData.Split(",");
   foreach (string stData in arrayData ) {
        MessageBox.Show(stData);
   }

のように分割して配列として扱います。



データ中に","がある場合はデリミタ(区切り文字)を別のものに変えればよいでしょう。

扱いたいデータが数値である場合は文字列に変換するか、今回は説明を見送りましたが別テーブルで管理するような対応が必要になると思います。

id:oyasayumin

よく分かりました。ありがとうございます。

検索してみると、MySQLやPostgreSQLでは配列型があるようなので、SQL server にも有るのかと思ってこの質問をしてみました。

自分で分割・格納する処理を作って対応しようと思います。

2007/09/19 11:26:42

その他の回答(1件)

id:Yota No.1

Yota回答回数453ベストアンサー獲得回数282007/09/19 08:38:01

ポイント100pt

http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_2a.htm...

SQL99では配列型というのがあって、DBMSによっては実装されています。

お使いのSQL serverのデータ型にこういうものがなければ、文字列型にして格納・取出しする方が手っ取り早いと思います。

id:oyasayumin

「SQL server 2000」と「SQL server 2005」を見てみたのですが、配列のデータ型は無いようです。

やはり文字列型を作って自分で分割・格納するしかないんですね。

2007/09/19 11:24:07
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/09/19 09:29:25ここでベストアンサー

ポイント500pt

PostgreSQL などでは データ型として配列をサポートしていますが、SQLServer はそういった型は無いので、処理により複数のデータを扱うよう対応する必要があります。

配列を個々のテーブルデータとして管理する方法もありますが、操作が面倒になるので今回はC#側でデータを処理する案を提示いたします。


まず配列データを格納するときに

   string arrayData = {"apple", "orange", "banana"};
   string joinedData = string.Join(",", arrayData );
   MessageBox.Show( joinedData );

のように結合し、一つの文字列としてデータを格納します。


逆にデータベースから取り出した後では、

   string[] arrayData = joinedData.Split(",");
   foreach (string stData in arrayData ) {
        MessageBox.Show(stData);
   }

のように分割して配列として扱います。



データ中に","がある場合はデリミタ(区切り文字)を別のものに変えればよいでしょう。

扱いたいデータが数値である場合は文字列に変換するか、今回は説明を見送りましたが別テーブルで管理するような対応が必要になると思います。

id:oyasayumin

よく分かりました。ありがとうございます。

検索してみると、MySQLやPostgreSQLでは配列型があるようなので、SQL server にも有るのかと思ってこの質問をしてみました。

自分で分割・格納する処理を作って対応しようと思います。

2007/09/19 11:26:42
  • id:Mook
    あら、SQL99で定義されていたんですね。

    SQL Server は準拠しているのかな?
    なかなか検索では見当たらないですが・・・。
  • id:oyasayumin
    oyasayumin 2007/09/19 11:37:28
    再度いろいろ検索してみたら、MySQLには配列型は無いみたいですね。
    なんで配列型をサポートしないデータベースが多いんだろ??
  • id:Mook
    たくさんのポイントといるかありがとうございました。

    以前、興味本位で PostgreSQLで配列型を使ってみましたが、
    処理側が結構大変なので、結局テーブル管理式に変更しました。

    しっかり作り込めばそれなりのメリットはあるのかもしれませんが、
    処理が面倒というのはあると思います。
  • id:Mook
    既にお気づきとは思いますが、文法ミスがありましたね。

    string arrayData = {"apple", "orange", "banana"};

    string[] arrayData = {"apple", "orange", "banana"};
    でした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません