WEB开发网
开发学院WEB开发ASP SqlCE 3.5 使用:ConnectionString 设定和一个小错... 阅读

SqlCE 3.5 使用:ConnectionString 设定和一个小错误的解决

 2010-01-14 10:44:53 来源:WEB开发网   
核心提示:1.SQLCE的使用SqlCE的使用和普通SQL区别不大,但是包不一样,SqlCE 3.5 使用:ConnectionString 设定和一个小错误的解决,不多说看例子: SQLCE3.5使用例程public class Db{public static void WriteLocation(Gps gps){stri
1.SQLCE的使用   
SqlCE的使用和普通SQL区别不大,但是包不一样,不多说看例子:



SQLCE3.5使用例程
public class Db
  {

    public static void WriteLocation(Gps gps)
    {
      string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.ToString());
      string dbcStr = @"Data Source =" + appPath.Replace(@"\\",@"\") + @"\Mc.sdf";
      SqlCeConnection sqlCon = new SqlCeConnection(dbcStr);
      SqlCeCommand sqlCmd = new SqlCeCommand(" ", sqlCon);
      sqlCon.Open();
      SqlCeTransaction sqltran = sqlCon.BeginTransaction();
      sqlCmd.Transaction = sqltran;
      
      try
      {  
        sqlCmd.CommandText = "INSERT INTO Location_t (Lc_Dt, Lc_Longitude, Lc_Latitude, Lc_Speed, Lc_Direction) VALUES (@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 (Exception ex)
      {
        sqltran.Rollback();        
      }
      finally
      {
        sqlCon.Close();        
      }
    }
  }
     

首先需要注意SQLCE需要 using System.Data.SqlServerCe;并且相关的类都要由Sql开头变为SqlCe开头。至于使用则和普通Sql没有什么区别。



2.ConnectionString
   在ConnectionString这里我很花了点功夫,开始怎么弄都不对,后来才发现是有点窍门的。在VS2008里面,它使用的路径是.\xxx.sdf,而在目标机上是不能使用相对路径的。

而绝对路径试了多次都不行,后来才找到一篇文章是取当前程序路径。string dbcStr = @"Data Source =" + appPath.Replace(@"\\",@"\") + @"\Mc.sdf";即这一句话。

需要注意的是@似乎表示引号中的内容不转义,这样呢写起来会比较方便。如果用转义的也可以,这个大家可以自己去试。@"\Mc.sdf",这个地方是数据库相对于执行文件的路径,

需要根据自己的实际情况进行修改。

3.一个小问题的解决
   首先要说的是经验主义要不得。在用上面的sql语句写数据库的时候开始有错误:ExPRession evaluation caused an overflow. [ Name of function (if known) = ]。

然后搜索的结果,发现是需要打sqlce sp2 beta2的补丁,结果打了补丁没用。后来觉得是不是数据类型的问题,将上面程序中对应的几个decimal的字段的长度和精度都进行了增加,

问题解决。因此估计该Exception应该是数据类型不匹配一类的问题。

作者:大米猫咪来回变
    
出处:http://goodleaf.cnblogs.com/

Tags:SqlCE 使用 ConnectionString

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接