3

次の JScript コードがあります。

var conn = new ActiveXObject ("ADODB.Connection");
conn.Open("Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=blah_blah_blah;User=foo;Password=bar;");
var cmd = new ActiveXObject("ADODB.Command");
cmd.ActiveConnection = conn;

var strSQL = "SELECT id FROM tbl_info WHERE title LIKE :search ORDER BY id";
var search = "test";

try{
    cmd.CommandText = strSQL;
    var param = cmd.CreateParameter(':search', 200, 1, 100, search);
    cmd.Parameters.Append(param);
    var rs = cmd.Execute();
    }
catch (ex) {
    Application.Alert("Error retrieving id information from database.");
}

Connection オブジェクトが Command の ActiveConnection に設定されていること、パラメーター オブジェクトが正しい値を持っていること、および Command オブジェクトが CommandText として正しい SQL クエリを持っていることを (それらを印刷して) 確認しました。また、try ブロックの各行の後にアラート ステートメントを挿入して、エラーが発生した場所を確認しました。cmd.Parameters.Append の後では問題ありませんが、Execute ステートメントを実行すると例外がスローされます。

実際の例外を表示しようとしましたが、これは単なる一般的な「オブジェクト エラー」メッセージです。

クエリは正常に実行され、Connection オブジェクトを介して直接 SQL クエリを (パラメータなしで) 実行すると正しい結果セットが返されますが、Command オブジェクトでパラメータ化されたクエリを使用すると失敗するようです。

Command オブジェクトと Connection オブジェクトのすべての設定とプロパティは正しいのですが、なんらかの理由で例外がスローされています。

これについての助けは大歓迎です。

4

1 に答える 1

3

ODBC と ADO では、一般的に、疑問符?がパラメーターのプレースホルダーとして使用されます。Parametersパラメーターは、コレクションに追加された順序でコマンドのプレースホルダーにバインドされます。あなたの例では、次のように置き換えますstrSQL

var strSQL = "SELECT id FROM tbl_info WHERE title LIKE ? ORDER BY id";

作成したパラメーターに名前を付けることはできますが、それが果たす唯一の目的は、後で名前で参照できるようにすることです (たとえば、 を使用cmd.Parameters.Item(":search"))。

于 2012-10-26T06:31:27.933 に答える