2

ASPアプリケーションからSQLServerデータベースへのタイムアウトとログイン接続の問題が発生しています。私のホスティングプロバイダーは、接続文字列をODBCDSNからOLEDBに変更することを提案しました。これを実行すると、最初のストアドプロシージャを実行するときにこのエラーが発生します。

プロシージャまたは関数'storedproc'には、指定されていないパラメータ'@param1'が必要です。

これが私の接続文字列です

Dim objconn
Set objconn = Server.CreateObject("ADODB.Connection")
objconn.open "Provider=SQLOLEDB;Data Source=localhost\sqlexpress;Initial Catalog=db;user id=user;password=pw"

これが私のストアドプロシージャ呼び出しです

Dim objrs, cmd
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = objconn
cmd.CommandText = "storedproc"
cmd.Parameters.Append(cmd.CreateParameters("param1",adDouble,adParamInput,,session("param1")))
Set objrs = Server.CreateObject("ADODB.Recordset")
objrs.CursorLocatoin = adUseClient
objrs.Open cmd

私のproc呼び出しが別の接続文字列で機能しない理由はありますか?

4

1 に答える 1

1

いくつかのタイプミスがありますが、タイプミス.CreateParameters => .CreateParameter.CursorLocatoin => .CursorLocation
質問にのみ適用されるように見えるため、無視しました。

CommandType プロパティ

CommandType プロパティ値が既定値の adCmdUnknown に設定されている場合、ADO はプロバイダーを呼び出して CommandText プロパティが SQL ステートメント、ストアド プロシージャ、またはテーブル名であるかどうかを判断する必要があるため、パフォーマンスが低下する可能性があります。使用しているコマンドの種類がわかっている場合、CommandType プロパティを設定すると、関連するコードに直接移動するように ADO に指示されます。CommandType プロパティが CommandText プロパティのコマンドの種類と一致しない場合、Execute メソッドを呼び出すとエラーが発生します。

私が理解しているように、 が指定されていない場合、アクションはプロバイダーによって異なりCommandTypeます。

SQL Server Profiler を使用してクエリを追跡しました。私が見たのは OLEDB Provider です。CommandType プロパティのないコマンド オブジェクトは、バックグラウンドでパラメーターなしでクエリを実行しますExec storedproc。これは、プロシージャがパラメーターなしの場合に適切に機能することを意味します。しかし、そうあるべきだったExec storedproc parametervalue。一方、あなたが言ったように、同じコードはMySQLで魅力的に機能します。

したがって、それが4に等しいと指定cmd.CommandTypeする必要があり、コードは機能します。 ところで、デフォルトでは-1 ( ) です。adCmdStoredProc
adCmdUnknown

于 2012-07-28T00:06:15.293 に答える