我想很多人都知道SqlCE使用远程数据访问请求数据都会用SqlCeRemoteDataAccess 类的PULL来请求,也叫拉数据,网上也可以找到相关资料。在我个人使用中,因为对数据库的不熟悉,所以带来了很多麻烦。先看看相关代码:
private static string internetserver = "http://192.168.1.2/MobileServer/sqlcesa30.dll";
private string internetuser = "sa";
private string internetpassword = "123";
private static string RemoteConnection = @"Data Source=USEPC;User ID=sa;password=123;Initial Catalog=AfterBillow";
private static string LocalPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
private static string LocalDatabase = LocalPath + "//Pafterbillow.sdf";
private string LocalConnectionStr = @"Data Source="+LocalDatabase+";password=222333";
private string LocalTableName = "PUser";
private string RemoteTableName = "User";
public void DBPull( )
{
string SQL;
SqlCeConnection cn;
SqlCeCommand cmd;
SqlCeRemoteDataAccess rda = null;
try
{
rda = new SqlCeRemoteDataAccess();
rda.InternetUrl = internetserver;
rda.InternetLogin = internetuser;
rda.InternetPassword = internetpassword;
rda.LocalConnectionString = LocalConnectionStr;
//请求下载远程数据表
SQL = "select UserName,Password from User";
rda.Pull(LocalTableName, SQL, @"Provider=sqloledb;Data Source=USEPC;User ID=sa;password=123;Initial Catalog=AfterBillow", RdaTrackOption.TrackingOnWithIndexes, "RDAErrors");
rda.Dispose();
}
catch (SqlCeException sex)
{
MessageBox.Show(sex.Message);
}
}
出现错误提示:设置非参数化查询时出错,可能是因为SQL查询不正确.
呵呵,这样的错误,当然出在SQL语句问题。在相关的QQ群上问了很多网友,都不得奇解,有人劝说把select * from User 改成 select 字段,字段 form User 。根据SQL Server 2005 Mobile Edition 联机丛书帮助所看,也应改成 select 字段,字段 form User,但也解决不了。
后来在SQL查询分析器里调试,发现User是关键字才知道问题所在,呵呵,改为别的表名,一切问题解决,真是晕死。又一个自已给自已的忠告。