2013-10-09 70 views
0

我有一段代碼專用於創建多個表,但它創建第一個然後拋出異常,但該異常不包含任何內容,其空白。這裏是我的代碼:sql只創建一個表

string connectionString = "DataSource=\"EventControl.sdf\""; 
     SqlCeEngine en = new SqlCeEngine(connectionString); 
     en.CreateDatabase(); 
     string createTable = "CREATE TABLE Login (userName nvarchar(50), UserType nvarchar(10), Salt nvarchar(100), Hash nvarchar(100))"; 
     string connection = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion = new SqlCeConnection(connection); 
     SqlCeCommand table = new SqlCeCommand(createTable, connexion); 
     try 
     { 
      connexion.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table.ExecuteNonQuery(); 
     connexion.Close(); 
     string createTable1 = "CREATE TABLE Logs (LogNo nvarchar(5), LoggedBy nvarchar(20), DateAndTime nvarchar(20), Callsign nvarchar(20), Category nvarchar(20), SubCategory nvarchar(20), Escalated nvarchar(15), Summary nvarchar(MAX), Complete nvarchar(10))"; 
     string connection1 = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion1 = new SqlCeConnection(connection1); 
     SqlCeCommand table1 = new SqlCeCommand(createTable1, connexion1); 
     try 
     { 
      connexion1.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table1.ExecuteNonQuery(); 
     connexion1.Close(); 
     string createTable2 = "CREATE TABLE Sites (SiteName nvarchar(100),SiteAddress nvarchar(100),PersonInCharge nvarchar(100))"; 
     string connection2 = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion2 = new SqlCeConnection(connection2); 
     SqlCeCommand table2 = new SqlCeCommand(createTable2, connexion2); 
     try 
     { 
      connexion2.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table2.ExecuteNonQuery(); 
     connexion2.Close(); 
     string createTable3 = "CREATE TABLE Categories (Category nvarchar(50), SubCategory nvarchar(50))"; 
     string connection3 = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion3 = new SqlCeConnection(connection3); 
     SqlCeCommand table3 = new SqlCeCommand(createTable3, connexion3); 
     try 
     { 
      connexion3.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table3.ExecuteNonQuery(); 
     connexion3.Close(); 
     string createTable4 = "CREATE TABLE Callsigns (StaffName nvarchar (50), Callsign nvarchar(50))"; 
     string connection4 = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion4 = new SqlCeConnection(connection4); 
     SqlCeCommand table4 = new SqlCeCommand(createTable4, connexion4); 
     try 
     { 
      connexion4.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table4.ExecuteNonQuery(); 
     connexion4.Close(); 
     string createTable5 = "CREATE TABLE Events (EventName nvarchar(100), EventLocation nvarchar(100), PersonInCharge nvarchar(100))"; 
     string connection5 = "Data Source =\"EventControl.sdf\""; 
     SqlCeConnection connexion5 = new SqlCeConnection(connection5); 
     SqlCeCommand table5 = new SqlCeCommand(createTable5, connexion5); 
     try 
     { 
      connexion5.Open(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     table5.ExecuteNonQuery(); 
     connexion5.Close(); 

它得到table1.ExecuteNonQuery然後停止。誰能幫忙?

PS在之前有人說爲什麼不只是在VS中創建數據庫,因爲我已經嘗試過,並且他們在我的計算機上工作正常,但是當我創建安裝文件進行部署時,文件夾變得混亂起來,程序難道不識別DB再

+0

任何錯誤消息?您是否在執行代碼時運行SQL Profiler?當你說「停止」時意味着什麼 - 像代碼控制暫停,應用程序崩潰? –

+0

SQL事件探查器?沒聽說過,聽起來很有用。它不凍結,它只是停留在該行,並打開所有的說和做時應該打開的形式 –

+0

不幸的[運氣不好](http://stackoverflow.com/questions/225121/profiler-for-sql- ce),我的建議是把'table1.ExecuteNonQuery();'放在Try-Catch中,看它是否彈出提示。祝你好運! –

回答

1

在表1 MAX值改變爲4000

+0

你能評論_why_這個工作嗎?當系統允許你時,請接受你自己的答案 – tacaswell

1

的數據類型爲nvarchar(MAX)不支持通過SQl Server Compact,使用ntext代替:

Summary ntext,