2010-01-07 188 views
0

你好:我在C#教自己Linq to Sql。因爲我正在使用SqlCE數據庫,所以必須使用SqlMetal來生成dbml文件。這很好,我將dbml文件添加到我的程序中。我找不出如何爲數據庫生成DataContext,但我可以查詢數據庫,但不能插入一行。以下是不起作用的示例:Linq to Sql問題

日誌是數據庫,練習是數據庫中唯一的表。

string con = Properties.Settings.Default.JournalConnectionString; 
      Journal db = new Journal(con); 

      Exercise ne = new Exercise(); 

      ne.Date = Convert.ToDateTime("2009-10-25T14:35:00"); 
      ne.Length = Convert.ToDouble(3.0); 
      ne.Elapsed = "00:53:35"; 

      db.SubmitChanges(); 

有人可以建議我在做什麼錯誤的插入?非常感謝你。

+0

我跑了sqlmetal命令/代碼:生成每DanThMan數據文件,現在我有db.Exercise.InsertOnSubmit(NE)命令可用,但我得到這個錯誤: 錯誤無法根據用法推斷方法'System.Data.Linq.Table .InsertAllOnSubmit (System.Collections.Generic.IEnumerable )'的類型參數。嘗試明確指定類型參數。我對我缺乏知識表示歉意,但這對我來說都是新的。 – 2010-01-07 19:00:06

回答

2

您忘記將記錄添加到表格中。

db.Exercises.InsertOnSubmit(ne); 

既然你正在學習這一點,它也是一個不錯的主意,用using

 using(Journal db = new Journal(con)) 
     { 

      Exercise ne = new Exercise(); 

      ne.Date = Convert.ToDateTime("2009-10-25T14:35:00"); 
      ne.Length = Convert.ToDouble(3.0); 
      ne.Elapsed = "00:53:35"; 

      db.Exercises.InsertOnSubmit(ne); //add this line to add rec to table 
      db.SubmitChanges(); 
     } 
+0

我redid的SqlMetal命令/ dbml和/代碼,它的工作。感謝您的回答,以及使用提示。 – 2010-01-07 20:08:17

2

你永遠不會調用DataContext.InsertOnSubmit

db.Exercises.InsertOnSumbit(ne); 
db.SubmitChanges(); 

如果你想插入多個Exercise的使用DataContext.InsertAllOnSubmit

// exercises is IEnumerable<Exercise> 
db.Exercises.InsertAllOnSubmit(exercises); 
db.SubmitChanges(); 
+0

+1 @Jason,我一直忘記他們改變添加到插入提交 – 2010-01-07 18:50:24

0

你應該做的SubmitChanges之前添加一行

db.Exercises.InsertOnSubmit(ne); 

0

你需要告訴上下文來插入您的對象。例如:

db.Exercises.InsertOnSubmit(ne); 
db.SubmitChanges(); 
0

要生成DataContext,需要使用SqlMetal.exe運行兩個不同的命令。

這是我一直在使用,希望能幫助你的批處理文件:

set tool_path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sqlmetal" 
set project_root="C:\Documents\...\Solution\Your_Project_Name" 

%tool_path% /server:.\SQLEXPRESS /database:Your_Database_Name /dbml:%project_root%\Models\Your_Dbml_Name.dbml 
if errorlevel 1 goto BuildEventFailed 

%tool_path% /server:.\SQLEXPRESS /database:Your_Database_Name /language:csharp /namespace:Your_Namespace.Models /code:%project_root%\Models\Your_DataContext_Class_Name.cs 
if errorlevel 1 goto BuildEventFailed 

goto BuildEventOK 

:BuildEventFailed 
exit 1 

:BuildEventOK 

你需要修改.\SQLEXPRESS映射到你的數據庫服務器。

插入嘗試的問題是您要創建要插入的對象,但實際上並未告訴LinqToSql插入它。您需要在數據上下文中調用InsertOnSubmit()

+0

我這樣做了,但我還沒有DataContext。我不知道這是因爲Compact Edition SQL還是什麼。 – 2010-01-07 19:10:09