需要通过 OLEDbCommand 的 FoxPro RLOCK() 命令的结果
Need the result of a FoxPro RLOCK() command via OLEDbCommand
我正在尝试通过 OleDbCommand 在 FoxPro table 上执行 RLOCK() 命令(记录锁定),但我需要知道锁定是否成功。在 FoxPro 中,RLOCK() returns .T.或.F.指示是否成功。
如何通过 OleDbCommand 获得该结果?
这是我当前的代码:
using(var conn = new OleDbConnection(...)) //connection string with VFPOLEDB provider
{
conn.Open();
using(var comm = new OleDbCommand())
{
string cText = @"[use table in 0] + chr(13) + "
+ @"[RLOCK(table)]";
comm.Connection = conn;
comm.CommandText = "Execute(" + cText + ")";
var result = comm.ExecuteNonQuery();
Consle.WriteLine(result);
comm.Dispose();
}
conn.Close();
conn.Dispose();
}
现在,我总是返回 1(真),即使由于记录已被其他人锁定而不应发生锁定。
感谢您的帮助。
因为您没有 returning rlock() 的结果(并且您正在使用 ExecuteNonQuery,当您应该询问 return 值并改用 ExecuteScalar 时)。如果您正确使用了 ExecuteScalar,您通常会使用该代码返回 true。在 VFP 中,每个过程 returns .T.如果未指定 return 值(或者如果您愿意,可以将其称为函数 - 在 VFP 过程中,函数除了名称外没有区别)。
这是您的代码的修订版:
string myCode =
@"use c:\temp\lockTest
locked = rlock()
return m.locked
";
string strCon = @"Provider=VFPOLEDB;Data Source=c:\temp";
using (OleDbConnection con = new OleDbConnection(strCon))
{
OleDbCommand cmd = new OleDbCommand("ExecScript", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@code", myCode);
con.Open();
Console.WriteLine(cmd.ExecuteScalar());
con.Close();
}
虽然这段代码运行良好,但我不知道你会用一个无用的 rlock() 做什么,除了了解到你由于某种原因无法锁定它。在现实生活中,Execscript 没有什么价值。
我正在尝试通过 OleDbCommand 在 FoxPro table 上执行 RLOCK() 命令(记录锁定),但我需要知道锁定是否成功。在 FoxPro 中,RLOCK() returns .T.或.F.指示是否成功。
如何通过 OleDbCommand 获得该结果?
这是我当前的代码:
using(var conn = new OleDbConnection(...)) //connection string with VFPOLEDB provider
{
conn.Open();
using(var comm = new OleDbCommand())
{
string cText = @"[use table in 0] + chr(13) + "
+ @"[RLOCK(table)]";
comm.Connection = conn;
comm.CommandText = "Execute(" + cText + ")";
var result = comm.ExecuteNonQuery();
Consle.WriteLine(result);
comm.Dispose();
}
conn.Close();
conn.Dispose();
}
现在,我总是返回 1(真),即使由于记录已被其他人锁定而不应发生锁定。
感谢您的帮助。
因为您没有 returning rlock() 的结果(并且您正在使用 ExecuteNonQuery,当您应该询问 return 值并改用 ExecuteScalar 时)。如果您正确使用了 ExecuteScalar,您通常会使用该代码返回 true。在 VFP 中,每个过程 returns .T.如果未指定 return 值(或者如果您愿意,可以将其称为函数 - 在 VFP 过程中,函数除了名称外没有区别)。
这是您的代码的修订版:
string myCode =
@"use c:\temp\lockTest
locked = rlock()
return m.locked
";
string strCon = @"Provider=VFPOLEDB;Data Source=c:\temp";
using (OleDbConnection con = new OleDbConnection(strCon))
{
OleDbCommand cmd = new OleDbCommand("ExecScript", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@code", myCode);
con.Open();
Console.WriteLine(cmd.ExecuteScalar());
con.Close();
}
虽然这段代码运行良好,但我不知道你会用一个无用的 rlock() 做什么,除了了解到你由于某种原因无法锁定它。在现实生活中,Execscript 没有什么价值。