SqlCE 3.5使用ConnectionString設(shè)定及錯(cuò)誤解決
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-05-04 17:13:47 閱讀次數(shù):3018次
1.SQLCE的使用
SqlCE的使用和普通SQL區(qū)別不大,但是包不一樣,不多說(shuō)看例子:
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;并且相關(guān)的類(lèi)都要由Sql開(kāi)頭變?yōu)镾qlCe開(kāi)頭。至于使用則和普通Sql沒(méi)有什么區(qū)別。
2.ConnectionString
在ConnectionString這里我很花了點(diǎn)功夫,開(kāi)始怎么弄都不對(duì),后來(lái)才發(fā)現(xiàn)是有點(diǎn)竅門(mén)的。在VS2008里面,它使用的路徑是.xxx.sdf,而在目標(biāo)機(jī)上是不能使用相對(duì)路徑的。
而絕對(duì)路徑試了多次都不行,后來(lái)才找到一篇文章是取當(dāng)前程序路徑。string dbcStr = @"Data Source =" + appPath.Replace(@"",@"") + @"Mc.sdf";即這一句話。
需要注意的是@似乎表示引號(hào)中的內(nèi)容不轉(zhuǎn)義,這樣呢寫(xiě)起來(lái)會(huì)比較方便。如果用轉(zhuǎn)義的也可以,這個(gè)大家可以自己去試。@"Mc.sdf",這個(gè)地方是數(shù)據(jù)庫(kù)相對(duì)于執(zhí)行文件的路徑,
需要根據(jù)自己的實(shí)際情況進(jìn)行修改。
3.一個(gè)小問(wèn)題的解決
首先要說(shuō)的是經(jīng)驗(yàn)主義要不得。在用上面的sql語(yǔ)句寫(xiě)數(shù)據(jù)庫(kù)的時(shí)候開(kāi)始有錯(cuò)誤:Expression evaluation caused an overflow. [ Name of function (if known) = ]。
然后搜索的結(jié)果,發(fā)現(xiàn)是需要打sqlce sp2 beta2的補(bǔ)丁,結(jié)果打了補(bǔ)丁沒(méi)用。后來(lái)覺(jué)得是不是數(shù)據(jù)類(lèi)型的問(wèn)題,將上面程序中對(duì)應(yīng)的幾個(gè)decimal的字段的長(zhǎng)度和精度都進(jìn)行了增加,
問(wèn)題解決。因此估計(jì)該Exception應(yīng)該是數(shù)據(jù)類(lèi)型不匹配一類(lèi)的問(wèn)題。
出處:http://goodleaf.cnblogs.com/
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)