如何在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字段?
试着这样写:
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);
注意按相同顺序添加的参数。无论字符串值是什么(甚至可以是整数、日期等,具体取决于您的表结构,但您的示例仅基于字符串),占位符都按顺序填充。