web-dev-qa-db-ja.com

NVarchar(max)SqlparameterをC#で作成する方法は?

ストアドプロシージャを使用して、動的に作成されたジョブ番号の文字列である文字列パラメーター@JobNumbersを入力する(したがって長さが不明である)DataTableを取得する次のコードがあります。

using (SqlConnection connection = new SqlConnection(con))
        {
            SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
            cmd.Parameters["@JobNumbers"].Value = JobNumber;

            SqlDataAdapter da = new SqlDataAdapter(cmd);

            connection.Open();
            da.Fill(JobDetails);
        }

ご覧のとおり、現在、JobNumberパラメーターの長さを4000に設定しています。これは、約500個のジョブ番号を取得するのに十分であり、十分なはずです。ただし、奇妙な機会にさらに必要になる可能性があります。だから、私は不思議でした、nvarchar(max)の同等のsqlパラメータタイプにパラメータを設定する方法はありますか?

同様のさまざまな質問を見ました( SQLCommandにパラメーターを渡すのに最適な方法は何ですか? )が、これを行うことができる(またはできない)かどうかを具体的に言うものはありません。第二に、ストアドプロシージャの@JobNumberパラメーターをnvarchar(max)に設定し、C#で長さを設定する必要がない場合、これを行う必要さえありますか?これを行うと、この質問で提案されているようにパフォーマンスの問題が発生する可能性があります SqlCommandパラメーターを追加するときに「SqlDbType」と「size」を使用する必要があるのはいつですか?

25
sr28

これは、nvarchar(max)を明示的に設定する方法です。

cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);

本当にパフォーマンスに関心がある場合は、整数のテーブルを渡すことを検討してください。 https://stackoverflow.com/a/10779593/465509

70
Sam7