Vb.net Linq到SQL数据库更新失败
非常简单的更新。它只是失败,没有错误,没有对数据库进行任何更改Vb.net Linq到SQL数据库更新失败,vb.net,linq-to-sql,Vb.net,Linq To Sql,非常简单的更新。它只是失败,没有错误,没有对数据库进行任何更改 Dim db As New BarClassesDataContext Dim foo = (From a In db.articles Where a.id = 14 Select a).Single Response.Write("<h3>" & foo.title & "</h3>") foo.title = "This is my new, updated title for arti
Dim db As New BarClassesDataContext
Dim foo = (From a In db.articles Where a.id = 14 Select a).Single
Response.Write("<h3>" & foo.title & "</h3>")
foo.title = "This is my new, updated title for article ID #14"
db.SubmitChanges()
Dim db作为新的BarClassesDataContext
Dim foo=(从db.articles中的a中选择a,其中a.id=14)。单个
Response.Write(“&foo.title&”)
foo.title=“这是我为文章ID#14更新的新标题”
db.SubmitChanges()
这是我文章类的相关部分。而且,这是一个web表单,所以我没有控制台。是否有其他方式查看T-SQL输出
<Table(Name:="dbo.article")> _
Partial Public Class article
Private _id As Integer
Private _issueid As Integer
Private _dateadded As Date
Private _title As String
Private _titlelink As String
Private _description As String
Private _image As String
Private _imagelink As String
Private _type As Integer
Public Sub New()
MyBase.New
End Sub
<Column(Storage:="_id", AutoSync:=AutoSync.Always, DbType:="Int NOT NULL IDENTITY", IsDbGenerated:=true)> _
Public Property id() As Integer
Get
Return Me._id
End Get
Set
If ((Me._id = value) _
= false) Then
Me._id = value
End If
End Set
End Property
_
部分公共类文章
私有_id为整数
Private _issueid作为整数
Private\u Date添加为日期
私有标题作为字符串
私有_titlelink作为字符串
私有\u描述为字符串
私有图像作为字符串
Private\u imagelink作为字符串
私有_类型为整数
公共分新()
我的基地,新的
端接头
_
公共属性id()为整数
得到
还给我
结束
设置
如果((Me.\U id=值)_
那么
Me.\u id=值
如果结束
端集
端属性
乍一看,我想说一个(但不是主要的)问题是“=”。我认为需要:
Dim foo = (From a In db.articles Where a.id == 14 Select a).Single
我看到的主要问题是缺少updateOnSubmit()语句。L2S如何知道您要进行更新
试一试
或者类似的东西。我怀疑您的数据库和/或System.Data.Linq.Mapping属性中没有正确定义的主键。向我们展示
文章
类-这可能就是您的问题所在。确保数据库中有一个标识字段,并且确保linqed up类在
属性中具有IsPrimaryKey:=True和IsDbGenerated:=True
此外,最好在DataContext上设置.Log属性,以查看正在执行的SQL。我喜欢调试窗口记录器技术,我在这里前面已经提到过:如果您有任何无效的字段定义,那么在
where
子句中添加0=1可能会出现问题。检查是否设置了所有不可为空的字段。(有一天晚上,我在观看SQL分析器无缘无故地添加额外的0=1时,为此争论了大约两个小时。)
(如果我能在上找到问题,我也会发布)你确定有一个id等于14吗?是的,有,id等于14。VB.NET中没有
=
这样的东西。它清楚地知道何时使用=
进行赋值,何时使用=
进行相等性比较。C#也知道如何做到这一点,但当你使用错误的编译器时,它只会给你一个编译器错误。也没有像UpdateOnSubmit()
这样的东西。有InsertOnSubmit()
,但这仅适用于新记录。DataContext跟踪它提供给您的对象,只需调用SubmitChanges()即可更新它们。拜托。。。一个VB问题和组合方法的C#代码-你有一个非常好的代表分数,所以我不得不假设你真的比这更了解。好主意!正如我在回答中提到的,设置.Log
属性将为您提供正在执行的SQL,因此您应该立即查看是否发生了一些奇怪的事情,而不是猜测/调试。
db.Articles.UpdateOnSubmit(foo);
db.SubmitChanges();