2010-01-07 114 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