1.SQLCE的使用
SqlCE的使用和普通SQL区别不大,但是包不一样,不多说看例子:
SQLCE3.5使用实例
公共类Db
{
公共静态无效WriteLocation(Gps GPS)
{
string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.ToString());
string dbcStr = @"数据源 = " + appPath.Replace(@" \",@" ") + @"Mc.sdf";
SqlCeConnection sqlCon = new SqlCeConnection(dbcStr);
SqlCeCommand sqlCmd = new SqlCeCommand(" ", sqlCon);
sqlCon.Open();
SqlCeTransaction sqltran = sqlCon.BeginTransaction();
sqlCmd.Transaction = sqltran;
尝试
{
sqlCmd.CommandText =“插入Location_t(Lc_Dt,Lc_Longitude,Lc_Latitude,Lc_Speed,Lc_Direction)值(@Lc_Dt,@Lc_Longitude,@Lc_Latitude,@Lc_Speed,@Lc_Direction)”;
sqlCmd.Parameters.Add("Lc_Dt", SqlDbType.DateTime).Value = gps.Datetime;
sqlCmd.Parameters.Add("Lc_Longitude", SqlDbType.Decimal).Value = gps.DLong;
sqlCmd.Parameters.Add("Lc_Latitude", SqlDbType.Decimal).Value = gps.DLat;
sqlCmd.Parameters.Add("Lc_Speed", SqlDbType.Decimal).Value = gps.DSpeed;
sqlCmd.Parameters.Add("Lc_Direction", SqlDbType.Decimal).Value = gps.DDirection;
sqlCmd.ExecuteNonQuery();
sqltran.Commit();
}
catch(异常前)
{
sqltran.Rollback();
}
最后
{
sqlCon.Close();
}
}
}
首先需要注意SQLCE需要使用System.Data.SqlServerCe;并且相关的类都必须由Sql引用作为SqlCe引用。至于使用则和普通Sql没有什么区别。
2.连接字符串
在ConnectionString这里我费了点功夫,开始怎么弄都不对,后来才发现是有点窍门的。在VS2008里面,它使用的路径是.xxx.sdf,而在目标机上是不能使用相对路径的。
而绝对路径试了多次都不行,后来才找到一篇文章是取当前程序路径。string dbcStr = @"Data Source = " + appPath.Replace(@" \",@" ") + @" Mc.sdf";即这句话。
需要注意的是@好像表示引号中的内容不转义,这样呢写起来会比较方便。如果用转义的也可以,这个大家可以去自己试一下。@"Mc.sdf",这个地方是数据库相对于执行文件的路径,
需要根据自己的实际情况进行修改。
3.一个小问题的解决
首先要说的是经验主义要不得。在用上面的sql语句写数据库的时候开始出现错误:表达式求值导致溢出。 [ 函数名称(如果已知) = ]。
然后搜索的结果,发现是需要打sqlce sp2 beta2的补丁,结果打了补丁没用。后来觉得不是数据类型的问题,将上面程序中对应的几个十进制的字段的长度和精度都进行了增加,
问题解决。由此估计该异常应该是数据类型与一类的问题不匹配。
作者:大米猫咪来回变