ASP.NET到SQL Server 2005,更新smalldatetime过程不';不行?
正如话题所暗示的那样。我正在做一个小程序,你可以浏览和处理一堆数据。问题在于,在向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 = @idASP.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
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之间在日期时间字段的本地化方面存在潜在的冲突。我没有很多经验