Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Linq到SQL数据库更新失败_Vb.net_Linq To Sql - Fatal编程技术网

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();