|
分類:[C#]
2007/12/19(Wed) 19:18:54 編集(投稿者) 2007/12/19(Wed) 19:18:47 編集(投稿者)
初めまして「なまもの」と申します。 開発環境は、「Visual Studio 2005」、使用データベースは「SQL Server2005」、 OSは「XP」です。最近になり VBからC#に移行しました。
SQLサーバーで作成したテーブルのフィールド(データ型は文字列型「nvarchar」)から フィールドサイズを取得する方法をご存知でしたら、教えて頂けます様御願い致します。
「System.Data.SqlClient.SqlDataReader」クラスの「GetBytes()」メソッド実行時に 「InvalidOperationExceptionはユーザーコードによってハンドルされませんでした。」 「存在しないデータを読み取ろうとしました。」とエラーで返されました。
同クラスの「GetName()」メソッドで、フィールド名は正常に取得できていますので テーブルが参照できていない様な状態では無いようです。「GetBytes()」の引数の 使い方が分かっていないだけだと思われます。ヘルプを見ても使用例が書いておらず、 解説内の「dataIndex」くらいしか意味が分かりませんでした。
実際のソースを記載致します。「GetBytes」の行だけ見て頂ければ良いと思います。
PS. このサイトの記事検索で、全ログから「フィールド (AND) サイズ」で検索しましても、 この件についての記載がありませんでした。 もしかして「知ってて当たり前」な事なのでしょうか?無知ですいません。
private void TEST_FieldSize_Get() { System.Data.SqlClient.SqlConnection SC; System.Data.SqlClient.SqlDataReader SDR; string[,] Tb_Field; // テーブルのフィールド情報を格納
// データベースファイルの情報 string myStr = "Data Source=TEST_DS;Initial Catalog=TEST_DB;" + "Integrated Security=True;Connection Timeout=30"; SC = new System.Data.SqlClient.SqlConnection(myStr); SC.Open();
// テーブルの情報 myStr = "SELECT TOP 1 * FROM [テストテーブル]"; System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(myStr, SC); SDR = com.ExecuteReader();
// フィールド情報を Tb_Field[,] に保存 Tb_Field = new string[SDR.FieldCount, 2]; // [フィールド件数(0〜X), 項目(0:名称 1:サイズ)] for (int i = 0; i < SDR.FieldCount; i++) // テストテーブルの全フィールド件数繰り返す { Tb_Field[i, 0] = SDR.GetName(i); // フィールド名を保存(この書式で問題ありませんでした)
////////////////////////////////////////////////////////////////////////////////////////// // ※※※ GetBytesは、実行時にエラーになる様です。 ※※※ // Tb_Field[i, 1] = SDR.GetBytes(0, i, null, 0, 0).ToString(); // サイズ(文字列型で保存) ////////////////////////////////////////////////////////////////////////////////////////// } SDR.Close(); SC.Close(); }
|