存储过程不更新Null字段

时间:2015-09-25 01:11:09

标签: sql-server vb.net stored-procedures

我设置了一个文本字段和按钮来修剪youtube链接的末尾并将其保存到SQL Server表中。但我的存储过程实际上没有保存任何东西。

HTML

<asp:TextBox ID="txtYoutubeLink" runat="server" AutoPostBack="true" Width="300"></asp:TextBox>
<asp:Button ID="btnSave" runat="server" Text="Save Link" Width="120" />

VB.Net

 Protected Sub btnSave_Click(sender As Object, e As System.EventArgs) Handles btnSave.Click
        If txtYoutubeLink.Text = "" Then
        Else

            Dim link As String = txtYoutubeLink.Text
            Dim shortlink As String = link.Substring(link.LastIndexOf("=") + 1)

            SqlHelper.ExecuteNonQuery(System.Configuration.ConfigurationManager.AppSettings("dbConn"), "X_WW_spSaveVideoUrl", lstStockItems.SelectedItem.Value.ToString(), shortlink)
        End If
    End Sub

存储过程

ALTER PROCEDURE [dbo].[X_WW_spSaveVideoUrl]
     @STOCKCODE VARCHAR(15),
     @VideoURL VARCHAR(max)
AS
    UPDATE Stock_Items 
    SET X_VIDEOURL = @VideoURL
    WHERE StockCode = @STOCKCODE

lstStockItems是由另一个存储过程设置的ASP:Datalist,值字段已正确设置为产品库存代码。它在几个页面上使用,所以我知道它不是它失败的地方,但我不明白为什么新程序不起作用。我唯一能想到的是,这用于覆盖现有表中的null字段,所以我的更新查询可能是错误的?

修改

这是另一个文本框/按钮组合,我用它来更改已经针对它们列出的产品的youtube链接。

Protected Sub btnUpdate_Click(sender As Object, e As System.EventArgs) Handles btnUpdate.Click
        If txtChangeYoutubeLink.Text = "" Then
        Else
            Dim link As String = txtChangeYoutubeLink.Text
            Dim shortlink As String = link.Substring(link.LastIndexOf("=") + 1)
            SqlHelper.ExecuteNonQuery(System.Configuration.ConfigurationManager.AppSettings("dbConn"), "X_WW_spSaveVideoUrl", lstLinked.SelectedItem.Value.ToString(), shortlink)
        End If
    End Sub

工作正常。因此,我可以使用该过程将X_VideoUrl字段从“blah”更改为“bleh”,但不能将其从NULL更改为“bleh”。

2 个答案:

答案 0 :(得分:0)

当您使用SP在数据库表中保存任何字符串时,您应该使用单个引用来编写'"++"'。您以这种方式传递变量值。

您可以执行此类更改。 SqlHelper.ExecuteNonQuery(System.Configuration.ConfigurationManager.AppSettings("dbConn"), '"X_WW_spSaveVideoUrl"', lstLinked.SelectedItem.Value.ToString(), shortlink)

Dim URL as string = "www.youtube.com"
SqlHelper.ExecuteNonQuery(System.Configuration.ConfigurationManager.AppSettings("dbConn"), '"+ URL +"', lstLinked.SelectedItem.Value.ToString(), shortlink)

答案 1 :(得分:0)

我找到了解决办法。在对我的代码进行晃动,刺激,诅咒和生气之后,我只是在我的手指上并在服务器管理器中运行了更新查询。更新了35,000个库存项目的列,将 NULL 更改为0。

我所做的查询可以毫不费力地将字段从0更改为我想要的任何内容,因此我不再使用空字段,只是确保列上的默认值为0以覆盖新的库存项目。

现在工作正常。