2013-05-21 154 views
1

我是一個試圖學習一些Web編程的新手。我正在使用C#在VS 2012中創建我的網站。我使用SQL Server CE 4.0在App_Data文件夾中連接了一個數據庫。我嘗試連接到它,如下所示:嘗試從C#連接到SQL Server CE時發生異常

SqlCeCommand cmd1 = new SqlCeCommand("SELECT Admin FROM SystemUsers WHERE Email=" + user.Email); 
SqlCeDataReader admin = null; 
SqlCeConnection conn = new SqlCeConnection(); 
conn.ConnectionString = "Data Source=MyData.sdf;Persist Security Info=False;"; 
conn.Open(); 
admin = cmd1.ExecuteReader(); 

當我執行,我得到了以下錯誤:

An exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll but was not handled in user code

任何想法,以什麼我做錯了嗎?我一直試圖弄清楚這個好幾個小時。

+0

您應該使用'using'與這些對象,如'使用(VAR CMD =新的SqlCommand()){}',所以它們正確地處置並且連接被關閉(任何實現IDisposable的事物)。此外,從不使用字符串連接的SQL語句;你的代碼容易受到SQL注入的攻擊;你應該使用SQL參數。 –

+1

嘗試單步執行調試器中的代碼,並且當異常彈出時,您應該能夠鑽取它以查看消息並可能發現InnerException.Message。該消息可能有點模糊,但這是一個起點。 – AaronLS

+0

在某些情況下,您應該捕獲異常並通過'ex.ToString()' –

回答

1

你說你的數據庫位於APP_Data目錄下,但是你的連接字符串假定位於你的站點的根目錄下。

嘗試用

conn.ConnectionString = @"Data Source|DataDirectory|\MyData.sdf;Persist Security Info=False;"; 

的| DataDirectory目錄|是一個佔位符字符串的.NET框架變爲預定位置,你的數據文件是supposed to stay

這是我會怎樣改變你的代碼

using(SqlCeConnection conn = new SqlCeConnection(@"Data Source|DataDirectory|\MyData.sdf;Persist Security Info=False;")) 
using(SqlCeCommand cmd1 = new SqlCeCommand("SELECT Admin FROM SystemUsers WHERE [email protected]", conn)) 
{ 
    conn.Open(); 
    cmd1.Parameters.AddWithValue("@mail", user.Email); 
    SqlCeDataReader admin = cmd1.ExecuteReader(); 
    while(admin.Read()) 
    { 
     ..... 
    } 
} 

正如你所看到的,我有此變化:

+0

感謝您的回答史蒂夫。不幸的是它仍然吐出同樣的錯誤。我確實提取了異常,它是文件路徑。 「」路徑無效。檢查數據庫的目錄。 [Path =〜\\ APP_DATA \\ MainDb.sdf]「}」 –

+0

MainDb.sdf或MyData.sdf? – Steve

+0

MainDb.sdf是數據庫名稱,我相應地更改了連接字符串建議。 –

相關問題