Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
ASP.NET到SQL Server 2005,更新smalldatetime过程不';不行?_Asp.net_Sql_Sql Update_Smalldatetime - Fatal编程技术网

ASP.NET到SQL Server 2005,更新smalldatetime过程不';不行?

ASP.NET到SQL Server 2005,更新smalldatetime过程不';不行?,asp.net,sql,sql-update,smalldatetime,Asp.net,Sql,Sql Update,Smalldatetime,正如话题所暗示的那样。我正在做一个小程序,你可以浏览和处理一堆数据。问题在于,在向SQL表中插入新行时,使用相同的方法进行更新会导致smalldatetime变量出现问题 我注意到使用profiler时exec命令在日期上加了双引号,但我似乎无法摆脱它。另外,插入时也会发生同样的双引号情况,而且效果很好。过程中的命令如下所示: exec spUpdateinfo @id=default, @job=N'Loadsoftext', @address=N'Loadsoftext', @startd

正如话题所暗示的那样。我正在做一个小程序,你可以浏览和处理一堆数据。问题在于,在向SQL表中插入新行时,使用相同的方法进行更新会导致smalldatetime变量出现问题

我注意到使用profiler时exec命令在日期上加了双引号,但我似乎无法摆脱它。另外,插入时也会发生同样的双引号情况,而且效果很好。过程中的命令如下所示:

exec spUpdateinfo @id=default, @job=N'Loadsoftext', @address=N'Loadsoftext', @startdate=''2009-02-01 00:00:00:000'', @enddate=''2009-05-15 00:00:00:000'', @other=N'Loadsoftext' exec spUpdateinfo @id=默认值, @作业=N'Loadsoftext', @地址=N'Loadsoftext', @起始日期=“2009-02-01 00:00:00:000”, @结束日期=“2009-05-15 00:00:00:000”, @其他=N'Loadsoftext' 我得到的是这个错误:

Msg 102, Level 15, State 1, Line 5 Incorrect syntax near '2009'. Msg 102,15级,状态1,第5行 “2009”附近的语法不正确。 我所做的是在asp.net codebehind中使用一个日期,并将其作为参数作为普通日期传递,假设它在SQL过程中转换为smalldatetime。使用的方法、变量和字符串等可能与插入时完全相同,但由于某些原因,更新会导致问题。我看到一些PreserveSingleQuotes()函数在谷歌搜索时被使用,但在vb或SQLServer2005中似乎不存在

你知道是什么原因导致了这种情况,以及如何让更新正常工作吗

编辑:Oh,日期最初是芬兰格式的dd.MM.yyyy。但正如前面所说的,所有这些都可以正常工作,并在使用INSERT时自动转换

编辑2:以下是全部代码

Asp.Net(vb)

Dim fdate作为日期 日期 fdate=CDate(BegindateTextBox.Text.Trim) ldate=CDate(EnddateTextBox.Text.Trim) Dim ID作为新的SqlParameter(“@ID”,Request.QueryString(“作业ID”)) 将作业调整为新的SqlParameter(“@Job”,JobTextBox.Text) Dim地址作为新的SqlParameter(“@Address”,AddressTextBox.Text) Dim Begindate作为新的SqlParameter(“@startdate”,fdate) Dim Enddate作为新的SqlParameter(“@Enddate”,ldate) 将Otherinfo设置为新的SqlParameter(“@other”,OtherinfoTextBox.Text) Begindate.DbType=DbType.Date Enddate.DbType=DbType.Date myCommand=newsqlcommand(“spUpdateinfo”) myCommand.CommandType=CommandType.StoredProcess myCommand.Connection=conn myCommand.Parameters.Add(ID) myCommand.Parameters.Add(作业) myCommand.Parameters.Add(地址) myCommand.Parameters.Add(Begindate) myCommand.Parameters.Add(结束日期) myCommand.Parameters.Add(其他信息) myCommand.ExecuteOnQuery() SQL过程

UPDATE jobInfo SET Job = @Job, Address= @Address, Begindate = CAST(@Begindate AS smalldatetime), Enddate = CAST(@Enddate AS smalldatetime), Otherinfo = @Otherinfo WHERE Job_id = @id
UPDATE jobInfo
SET Job = @Job,
    Address= @Address,
    Begindate = CAST(@Begindate AS smalldatetime) //Try removing the cast,
    Enddate = CAST(@Enddate AS smalldatetime) //Try removing the cast,
    Otherinfo = @Otherinfo
WHERE Job_id = @id
更新工作信息 SET Job=@Job, 地址=@地址, Begindate=CAST(@Begindate作为smalldatetime), Enddate=CAST(@Enddate为smalldatetime), Otherinfo=@Otherinfo 其中Job_id=@id 我花了一段时间,因为我必须编辑掉敏感内容。不管怎样,谢谢你的帮助,有什么想法吗?你可以看到演员等在那里,因为我已经试图摆弄任何我可以修复它,但它仍然不工作

编辑3:谢谢你的帮助,今天休息,所以我明天会继续看这个。

试试这个:

exec spUpdateinfo 
@id=default,
@job=N'Loadsoftext',
@address=N'Loadsoftext',
@startdate='2009-02-01 00:00:00:000',
@enddate='2009-05-15 00:00:00:000',
@other=N'Loadsoftext'
创建日期时间字符串时,应该只需要一个撇号

编辑

Asp.Net(vb)

SQL过程

UPDATE jobInfo SET Job = @Job, Address= @Address, Begindate = CAST(@Begindate AS smalldatetime), Enddate = CAST(@Enddate AS smalldatetime), Otherinfo = @Otherinfo WHERE Job_id = @id
UPDATE jobInfo
SET Job = @Job,
    Address= @Address,
    Begindate = CAST(@Begindate AS smalldatetime) //Try removing the cast,
    Enddate = CAST(@Enddate AS smalldatetime) //Try removing the cast,
    Otherinfo = @Otherinfo
WHERE Job_id = @id

这很奇怪,因为你所做的与我经常做的非常相似,我没有你遇到的问题。我唯一能建议的就是删除我突出显示的部分,看看它是否有效。我之所以建议这样做,是因为在我通常使用的代码中,它们不是必需的。

我认为这是双引号的问题。探查器可能看起来有它,因为它在一个主sp_executesql语句中显示它,并转义为单引号。但是,您现有的语句应该是单引号而不是双引号。

如何从ASP.NET调用存储过程?是否使用SqlCommand对象并通过参数集合将参数添加到命令中

通常,您不会使用文本命令,而是将类型也设置为StoredProcedure。以下示例使用5个参数调用名为“tblAccount_Save”的存储过程:

    Dim conn As New SqlConnection("server=myserver;integrated security=sspi;initial catalog=mydb;")
    Dim sql As String = "[dbo].[tblAccount_Save]"
    Dim comm As System.Data.SqlClient.SqlCommand = New SqlCommand(sql, conn)
    comm.CommandType = System.Data.CommandType.StoredProcedure
    comm.Parameters.AddWithValue("@ID", id)
    comm.Parameters.AddWithValue("@AccountNumber", number)
    comm.Parameters.AddWithValue("@ClassID", class)
    comm.Parameters.AddWithValue("@LastName", lastName)
    comm.Parameters.AddWithValue("@FirstName", firstName)
    comm.ExecuteNonQuery()
请提供有关如何从codebehind调用存储过程的更多信息


谢谢。

编辑4:好的,开始工作了。谢谢你的帮助,也很抱歉给你添麻烦,因为这个漏洞从一开始就不在日期中。@id=default应该是一个提示。我链接到编辑页面的部分有一个输入错误,我将“job_id”设置为“jb_id”,因此实际的数字从未返回。我不敢相信我错过了这个,花了几个小时在这个上面


哦,正如我所说的,谢谢你的帮助D

您甚至可以去掉时间部分,因为默认的ScoreGraphic添加了00:00:00.000:没错,我只是尝试进行尽可能少的更改来解决问题。我个人以“dd/mm/yyyy”的形式设置了所有日期时间,但每个日期都有自己的时间。问题是:“我注意到使用探查器时,exec命令在日期上加了双引号,但我似乎无法消除它。”我相信原始海报已经注意到了额外的双引号。仔细阅读这个问题,他似乎想知道为什么会发生这种情况。是的,我知道双引号。如前所述,出于某种原因,INSERT子句也使用了double,但不管怎样,它都可以正常工作。插入和更新在所有方面都是相同的,但更新不起作用。Zan:如果我上面的编辑中没有任何建议可以解决这个问题,那么我唯一能想到的就是asp.net代码和SQL Server之间在日期时间字段的本地化方面存在潜在的冲突。我没有很多经验