■7751 / inTopicNo.1) |
SqlParameterの、sizeについて |
□投稿者/ いとう (1回)-(2007/09/14(Fri) 11:34:36)
|
分類:[C#]
(.NET C#) System.Data.SqlClient.SqlParameter について、
コンストラクタ (String, SqlDbType, Int32) のInt32は、パラメータの長さを指定しますが、 これは例えば、SQL Serverのデータ型がVARCHAR等の場合、テーブルの列のサイズを指定するのが妥当だと思います。 だとすると、常に列のサイズ変更の影響を受けることになり、管理が面倒な気がします。 (例) SqlParameter nameParam = new SqlParameter("@name", SqlDbType.VarChar, 10); nameParam.Value = "xxx";
SqlCommand cmd = new SqlCommand("INSERT INTO ...略", _sqlConnection); cmd.Parameters.Add(nameParam); cmd.Prepare();
パラメータの長さを指定しない場合は、コンストラクタ SqlParameter(String, SqlDbType) ですが、 可変長(VARCHAR等)のデータ型の場合、System.Data.SqlClient.SqlCommandのPrepareメソッドにおいて例外が発生します(下記)。 # System.InvalidOperationException: SqlCommand.Prepare メソッドは、可変長のパラメータは # すべて明示的に設定された non-zero サイズを持つことを要求します。
どうも、そう書かれてあるようです。 # SqlCommand.Prepare メソッド # http://msdn2.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.prepare.aspx # 可変長データ型を指定する場合は、Size の最大値も指定する必要があります。
また他に、SqlParameter.ValueのToString().Lengthにあたるものを引数のサイズとして使用するのは、意味があるとは思えません。
テーブルの列のサイズを、プログラムで管理したくない状況もあるはずですが、 列のサイズ変更の影響を受けない、他に良いやり方があるんでしょうか?
そもそもみなさんは、どうやっているのでしょうか? サイズの管理が面倒だと思われている方も多いのではないかと思いますが、そのあたりはどうなんでしょうか?
|
|