Stored procedures 带有Oledb提供程序的Visual Foxpro数据库存储过程
我使用的是VisualFoxpro8.0数据库。我使用以下过程根据条件匹配从数据库返回记录,但它引发错误: “功能未实现。” Foxpro程序------------------------Stored procedures 带有Oledb提供程序的Visual Foxpro数据库存储过程,stored-procedures,visual-foxpro,Stored Procedures,Visual Foxpro,我使用的是VisualFoxpro8.0数据库。我使用以下过程根据条件匹配从数据库返回记录,但它引发错误: “功能未实现。” Foxpro程序------------------------ PROCEDURE FX_Proc_ValidateUser (paramUserName AS Character, paramPassword AS Character) LOCAL VarUserName AS Character, varXml VarUserName = IIF(VARTYPE(p
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
用于调用此过程的前端代码------------------
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
如何使用OledbCommand从foxpro 8.0存储过程中获取结果集?我周围没有VFP,上次使用VFP时还是3.0版 根据规格,我会尝试类似的东西。要了解其余内容,请通读
VisualFoxPro存储过程基本上是使用VisualFoxPro代码执行任务,例如在插入、更新或删除时验证列 例如,您可以将以下代码添加到VFP数据库存储过程中,以验证“状态”列:
您还可以使这些视图可更新,并对该视图执行插入操作。问题似乎在于您正在将结果放入数组中,并且只返回数组中的第一项。您应该更改存储过程,使其使用游标 VFP9示例 下面是northwind.dbc中的存储过程示例: 下面是一个使用C#调用存储过程的示例: VFP8示例: (我没有VFP8的副本,但我相信这会起作用)
也许这个链接有帮助:感谢rene的帮助,我使用了您的过程,但它只返回记录的唯一键,而如果条件匹配,我必须从数据库返回resultset。我已经更新了我的问题,请再次查看并帮助我。。再次感谢Hi Rene,请告诉我如何使用OledbCommand从foxpro存储过程中获取结果集ThanksHi Jerry,我在从foxpro数据库获取结果集时遇到了问题。请查看我更新的问题…并帮助我。谢谢Tom Brothers,此过程很有意义,但我使用的是Visual Foxpro 8.0,因此这里的SETRESULTSET()不支持。当我使用Oledb提供程序访问该过程时,它引发了一个错误:“文件'setresultset.prg'不存在”。请建议我这是紧急情况。感谢Tom Brothers的努力,但通过使用您的新过程及其使用方式,我得到了一个新的异常,即调试行命令时“未实现函数”。ExecuteScalar()。亲爱的Tom Brothers,执行命令时,.net代码中出现错误。var xml=command.ExecuteScalar()作为字符串;我安装了VFP8并测试了我的代码。它像预期的那样工作。你们能发布你们的存储过程代码吗?嗨,汤姆兄弟,我已经编辑了这个问题,你们可以看到我在存储过程中写了什么,以及如何从.net执行这个问题
PROCEDURE insertData (pusername, ppassword)
SELECT userinfoid, username, password
FROM tm_userinfo.dbf
WHERE username = pusername AND password = ppassword
INTO ARRAY results
RETURN results
ENDPROC
PROCEDURE ValidateState()
IF address.state <> [OH]
MESSAGEBOX([Incorrect State value!], 48, [Invalid State])
ENDIF
ENDPROC
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.
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);
}
}
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];
}
}
}