如何在c#中修改FoxPro memo

本文关键字:修改 FoxPro memo | 更新日期: 2023-09-27 18:16:40

我有一个非常大的字符串要更新到备忘录字段的FoxPro表,我尝试

 cmd = db.GetSqlStringCommandWrapper("UPDATE xxx SET memo1 = "adfsd" WHERE condition1 = 'satisfied'");
 db.ExecuteNonQuery(cmd);

这个查询将覆盖memo1中前面的值。

我不能在c#中使用MODIFY memo

如何使用c#将字符串附加到Foxpro中已经存在的memo字段?

如何在c#中修改FoxPro memo

试着这样写:

UPDATE xxx SET memo1 = memo1 + "adfsd"

我认为问题可能是与GetSqlStringCommandWrapper,据我所见已弃用。

这应该不是问题,例如使用OLEDB提供程序:

var DBC = @"C:'mydata.dbc";
string ConnectionString = string.Format("Provider=VFPOLEDB.1;Data Source={0};Exclusive=false;Ansi=true;OLE DB Services = 0", DBC);
using (OleDbConnection testConnection = new OleDbConnection(ConnectionString))
{
    OleDbCommand updateCommand = new OleDbCommand(@"update mytable set mymemo=alltrim(mymemo)+ttoc(datetime()) where thisfield='THISVALUE'", testConnection);
    testConnection.Open();
    updateCommand.ExecuteNonQuery();
    Console.WriteLine(@"Finished - press ENTER.");
    Console.ReadLine();
}

您需要参数化您的查询。假设查询包装器获得了数据库的sql连接句柄。VFP OleDB提供程序使用"?"作为参数的"占位符",并且必须匹配与您的查询相关联的顺序。

对于一个非常相似的问题,我这里有一个更详细的例子……

试试

string whatToSetItTo = "this is a test string that can even include 'quotes'";
cmd = db.GetSqlStringCommandWrapper("UPDATE YourTable SET memo1 = ? WHERE someKeyColumn = ?");
cmd.Parameters.Add( "parmForMemoField", whatToSetItTo);
cmd.Parameters.Add( "parmForKeyColumn", "satisfied" );

db.ExecuteNonQuery(cmd);

注意按相同顺序添加的参数。无论字符串值是什么(甚至可以是整数、日期等,具体取决于您的表结构,但您的示例仅基于字符串),占位符都按顺序填充。