2009-03-21 2 views
0

「 でSelectCommandが=」市= @市 "従業員からの社員、姓、姓、 タイトル、都市を選択> Ado.netはストアドプロシージャに値または型だけを渡しますか?

A)私はあなたがの型パラメータを指定しないときと仮定 インスタンス "City"は自動的にObject型であるため、後で に任意の型の値を割り当てることができるため、 "City"が後になると(、SqlDataSource2_Selecting()イベントハンドラ内)、 間違ったタイプですが、この間違った割り当てはSql でのみ検出されますエラーが発生しました(もちろん、SQLサーバはエラー をWebサーバに返します)。

B)我々はタイプNVARCHAR(20)のSqlParameterのインスタンスを作成し、 は、ストアドプロシージャには、このパラメータを渡したい場合は、 ストアドプロシージャには、このパラメータの値だけを渡しADO.NETますまたは 何らかの形でこのパラメータの正確な型( はNVarChar(20)ですか)を通知しますか?パラメータ値が格納されている

ありがとう

答えて

1

データ型は常にobjectあります。型を指定しない場合、ドライバは割り当てられた値のデータ型に基づいてデータベースのデータ型を推測します。したがって、必要な型を指定する方が安全です。

データ型(NVarChar)がデータベースに渡される可能性がありますが、実際にはわかりませんが、長さはありません。指定された長さは、データベースに送信されるデータのみを制限し、ストアード・プロシージャーで指定された長さに一致する必要はありません(通常はそうする必要があります)。ストアドプロシージャで指定された長さより長い長さを使用する場合、ドライバはストアドプロシージャが受け入れるには長すぎる値を送信することを許可することがあります。

データ型がデータベースに送信されるかどうかにかかわらず、正しい形式で値を送信するために使用されます。

+0

Ado.Netがパラメータ値をデータベースに戻すとき、これらのパラメータは内部的にどのように表されますか?つまり、Ado.NetはSQL Serverに送信する前にInt32パラメータを渡しますが、この値と同じビット表現はSqlサーバー上にありますか? – SourceC

1

パラメータはSQL Serverによって設定されており、ADOが実際にサーバーと通信するときに、パラメータで指定された型がデータと一緒に渡されないことがわかります。したがって、間違ったデータ型を指定することは完全に可能であり、SQL Serverがエラーを返すまではわかりません。

Bと同様に、データのみが送信されます。

+0

ご協力いただきありがとうございます – SourceC

3

いいえ、SQL Serverは、ストアドプロシージャコールのパラメータの型については通知されません。でパラメータを渡すと、正しい型に変換しようとしますが、変換できない場合は文句を言います。

関連する問題