我有一个非常大的字符串要更新到FoxPro Table的备注字段,我试过
cmd = db.GetSqlStringCommandWrapper("UPDATE xxx SET memo1 = "adfsd" WHERE condition1 = 'satisfied'");
db.ExecuteNonQuery(cmd);
此查询将覆盖memo1中的先前值。
我无法在C#中使用MODIFY memo
。
如何使用C#将字符串附加到Foxpro中已存在的备注字段?
答案 0 :(得分:0)
尝试发出命令说:
UPDATE xxx SET memo1 = memo1 + "adfsd"
答案 1 :(得分:0)
我认为问题可能出在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();
}
答案 2 :(得分:0)
您需要参数化您的查询。假设您的查询包装器获取数据库的sql连接句柄。 VFP OleDB Provider使用“?”作为参数的“占位符”,必须与查询相关联的订单匹配。
我有一个更详细的样本to a very similar question here...
尝试类似
的内容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);
注意以相同顺序添加的参数。无论字符串值是什么(或者甚至可以是与表结构相对应的整数,日期等,但您的样本仅基于字符串),占位符按顺序填充。值会相应更新。