2015-09-25 3 views
0

У меня есть текстовое поле и кнопка, настроенная для обрезки конца ссылки на YouTube и сохранения ее в таблице SQL Server. Но моя хранимая процедура на самом деле ничего не спасает.Сохраненная процедура не обновляется Поле Null

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 от «бла» до «bleh», но не может изменить его с NULL на «bleh».

+0

Вы отлаживаете свой код? Вы пытаетесь увидеть, какие значения хранятся в shortlink и lstStockItems.SelectedItem.Value.ToString() и какое значение вы передаете? Возможно, вы передаете значения в неправильной последовательности. –

+0

Ссылка Youtube https://www.youtube.com/watch?v=Q03nIupGAIQ правильно сокращена до Q03nIupGAIQ, но не отправлена ​​в таблицу SQL. Я также дважды проверял, что он получает правильный элемент Item Item. – Wompguinea

+0

Показать этот метод/подпись .. 'SqlHelper.ExecuteNonQuery (System.Configuration.ConfigurationManager.AppSettings (" dbConn ")," X_WW_spSaveVideoUrl ", lstStockItems.SelectedItem.Value.ToString(), shortlink)'.Я почти могу это сделать, поскольку аргументы, которые вы передаете, обычно не позволяют это сделать, если вы не создали этот метод ... Также это не параметры sql, я не знаю, что вы даже скомпилируете это. – Codexer

ответ

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) 
+0

Строка после '(" dbConn ")' не является строкой, сохраняемой в таблице. Это имя хранимой процедуры и работает только с двойными кавычками. Это стандартная часть кода этого сайта, это больше сама процедура SQL, о которой мне интересно, поскольку она работает в одном случае, но не в другом? – Wompguinea

+0

где ваш полный код? – Developer

+0

Какую часть кода вы хотите увидеть? Я опубликовал все, что связано с этой ситуацией, остальная часть страницы включает в себя макет и еще пару кнопок, выполняющих разные функции. Сама строка SQLHelper не является проблемой, так как она используется не менее 100 раз по всему сайту. – Wompguinea

0

Я нашел работу вокруг. После извиваясь, подталкивая, ругаясь и злясь на мой код, я просто скрестил пальцы и запускал запрос на обновление в диспетчере серверов. Обновленный столбец для 35 000 штук, сменив NULL до 0.

Выполненный запрос не сменил поле с 0 на то, что я хотел, поэтому я прекратил возиться с нулевыми полями и просто удостоверился, что по умолчанию значение в столбце равно 0 для покрытия новых позиций запаса.

Работы хорошо сейчас.

+1

Для дальнейшего чтения: http://www.dbdebunk.com/2012/07/null-confusion.html – Khrys

+0

Это интересная статья, я всегда считал, что у NULL больше проблем, чем того стоит. Я все еще думаю, что это странно, что я мог бы меняться от 0 до 1, но не от нуля до 1. – Wompguinea