1.คำสั่ง SQLCE
SqlCE ของ SQL 区别不大,但是包不一样,不多说看例子:
SQLCE3.5 使用例程
คลาสสาธารณะ Db
-
โมฆะสาธารณะคง WriteLocation (gps gps)
-
สตริง appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase.ToString());
สตริง dbcStr = @"แหล่งข้อมูล =" + appPath.Replace(@" \",@" ") + @"Mc.sdf";
SqlCeConnection sqlCon = SqlCeConnection ใหม่ (dbcStr);
SqlCeCommand sqlCmd = SqlCeCommand ใหม่(" ", sqlCon);
sqlCon.Open();
SqlCeTransaction sqltran = sqlCon.BeginTransaction();
sqlCmd.Transaction = sqltran;
พยายาม
-
sqlCmd.CommandText = "INSERT INTO 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.กระทำ();
-
catch (ข้อยกเว้น เช่น)
-
sqltran.ย้อนกลับ();
-
ในที่สุด
-
sqlCon.ปิด();
-
-
-
คำสั่ง SQLCE ที่ใช้ System.Data.SqlServerCe; คำสั่ง SQL ของ Sqlce นั้นมีอยู่แล้ว什么区别.
2.สายเชื่อมต่อ
在ConnectionString这里我很花了点功夫,野么弄都不对,后来才发现是有点窍门的。在VS2008里的,它使用的路径是.xxx.sdf,而在目标机上是不能使用相对路径的。
โปรดใช้สตริง dbcStr = @"Data Source =" + appPath.Replace(@" \",@" ") + @" Mc.sdf";即这一句话。
ข้อมูลเพิ่มเติม可以自己去试。@"Mc.sdf",这个地方是数据库相对于执行文件的路径,
需要根据自己的实际情况进行修改。
3.一个小问题的解决
首先要说的是经验主义要不得。在用上的sql语句写数据库的时候验义要不误:การประเมินนิพจน์ทำให้เกิดการโอเวอร์โฟลว์ [ ชื่อของฟังก์ชัน (ถ้าทราบ) = ]。
然后搜索的结果,发现是需要打sqlce sp2 beta2的补丁,结果打了补丁没用。后来觉得是不是数据类型的问题,将上的程序中对应的几个decimal的字段的长度和精度都进行了增加,
问题解决。因此估计该Exception应该是数据类型不匹配一类的问题。
作者:大米猫咪来回变