1

Visual Foxpro 8.0 データベースを使用しています。以下の手順では、条件一致に基づいてデータベースからレコードを返すために使用していますが、次のエラーが発生しました。

「機能が実装されていません。」

Foxpro 手順 ------------------------

PROCEDURE FX_Proc_ValidateUser (paramUserName AS Character, paramPassword AS Character)
LOCAL VarUserName AS Character, varXml
VarUserName = IIF(VARTYPE(paramUserName)!="N","",paramUserName)
LOCAL VarPassword AS Character
VarPassword = IIF(VARTYPE(paramPassword)!="N","",paramPassword)
SELECT userinfoid, ;
        username, ;
        password ;
FROM tm_userinfo.dbf ;
WHERE username = VarUserName AND password = VarPassword ;
INTO CURSOR procResult  
varXml = ""
CURSORTOXML("procResult","varXml",1,32,0,"1")
RETURN varXml
ENDPROC

このプロシージャを呼び出すためのフロント エンド コード------------------

string ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\Users\raj\Documents\Visual FoxPro Projects\dbFoxMaster.dbc;Collating Sequence=machine;" providerName="System.Data.OleDb.OleDbConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
OledbConnection objOleDbConnection = new OleDbConnection(ConnectionString);
objOleDbConnection.Open();
OleDbCommand objOleDbCommand = new OleDbCommand();
objOleDbCommand.CommandType = CommandType.StoredProcedure;
objOleDbCommand.CommandText = "FX_Proc_ValidateUser";
objOleDbCommand.Connection = objOleDbConnection;
objOleDbCommand.Parameters.Add("paramUserName", OleDbType.Char).Value = "abc";
objOleDbCommand.Parameters.Add("paramPassword", OleDbType.Char).Value = "123";
var xmlString = oOleDbCommand.ExecuteScalar().ToString();
    DataTable table = new DataTable();
    using (var reader = new StringReader(xmlString))
    {
        var dataSet = new DataSet();

        // creating a dataset from the xml 
        dataSet.ReadXml(reader);
        table = dataSet.Tables[0];
    }

OledbCommand を使用して foxpro 8.0 ストアド プロシージャから結果セットを取得する方法は?

4

3 に答える 3

3

問題は、結果を配列に入れようとしていて、配列の最初の項目だけが返されていることのようです。カーソルを使用するようにストアド プロシージャを変更する必要があります。

VFP9 の例

これは、northwind.dbc のストアド プロシージャの例です。 ここに画像の説明を入力

C# を使用してストアド プロシージャを呼び出す例を次に示します。

var northwindDbcPath = @"C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind\Northwind.dbc";
var connectionString = "Provider=VFPOLEDB.1;Data Source=" + northwindDbcPath;
var table = new DataTable();

using(var connection = new OleDbConnection(connectionString)) {
    using(var command = connection.CreateCommand()) {
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "CustOrdersDetail";
        command.Parameters.Add("x", 10248);

        var adapter = new OleDbDataAdapter(command);

        adapter.Fill(table);
    }
}

VFP8 の例: (私は VFP8 のコピーを持っていませんが、これでうまくいくと思います) ここに画像の説明を入力

var northwindDbcPath = @"C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind\Northwind.dbc";
var connectionString = "Provider=VFPOLEDB.1;Data Source=" + northwindDbcPath;
DataTable table;

using(var connection = new OleDbConnection(connectionString)) {
    using(var command = connection.CreateCommand()) {
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "CustOrdersDetail2";
        command.Parameters.AddWithValue("x", 10248);

        connection.Open();      
        // executing stored procedure and getting xml result
        var xml = command.ExecuteScalar() as string;

        connection.Close();

        using(var reader = new StringReader(xml)) {
            var dataSet = new DataSet();

            // creating a dataset from the xml 
            dataSet.ReadXml(reader);
            table = dataSet.Tables[0];
        }
    }
}
于 2013-01-07T21:17:24.410 に答える
0

私は VFP を持っていません。最後に VFP を使用したときは、まだバージョン 3.0 でした...

ここの仕様に基づいて、このようなことを試してみます。ここで残りの読み物を学ぶ

PROCEDURE insertData (pusername, ppassword)

                    SELECT userinfoid, username, password 
                    FROM tm_userinfo.dbf 
                    WHERE username = pusername AND password = ppassword
                    INTO ARRAY results
     RETURN results
ENDPROC
于 2013-01-05T13:38:04.700 に答える
0

Visual Foxpro ストアド プロシージャは、基本的に Visual Foxpro コードを使用して、挿入、更新、または削除時に列を検証するなどのタスクを実行します。

たとえば、次のコードを VFP データベース ストアド プロシージャに追加して、"State" 列を検証することができます。

PROCEDURE ValidateState()
IF address.state <> [OH]
    MESSAGEBOX([Incorrect State value!], 48, [Invalid State])
ENDIF
ENDPROC

Foxpro データベース内のテーブルを照会する場合は、ローカル ビューの作成を検討することをお勧めします。これを行うには、foxpro データベース内を右クリックして [新しいローカル ビュー] を選択し、クエリ ビルダーを使用してビューを定義します。[フィルタ] タブの [例] 列で、[?] 記号を使用してパラメータを定義できます。「?pusername」など。

Foxpro コードからビューを呼び出す方法は次のとおりです。

 LOCAL pusername AS Integer   
 pusername = "SomeUserName"    &&Use this to filter the view
 SELECT 0
 USE MyViewName       &&This will call the view and perform the filter.

これらのビューを更新可能にして、ビューに対して挿入を実行することもできます。

于 2013-01-06T01:23:43.007 に答える