Как установить значение параметра sqldatasource?

Я пытаюсь установить значение sqldatasource параметра selectcommand @ClientID, как в приведенном ниже коде, но это не работает.

Мой код:

Dim strCommand = "SELECT caller_id, phone, name, email FROM callers WHERE client_id=@ClientID"

SqlDataSource2.SelectCommand = strCommand

SqlDataSource2.SelectParameters.Add("@ClientID", iClientID) 

Что я делаю неправильно?


person thegunner    schedule 12.06.2009    source источник


Ответы (7)


Хитрость, чтобы заставить его работать, состоит в том, чтобы удалить параметр, который вы пытаетесь использовать, прежде чем добавлять его. Следующая адаптированная версия вашего кода должна работать:

' NOTE that there is no "@" sign when you use your parameters in the code
Parameter p = strCommandSqlDataSource2.SelectParameters["ClientID"]
strCommandSqlDataSource2.SelectParameters.Remove(p)
strCommandSqlDataSource2.SelectParameters.Add("ClientID", iClientID)

Вы не должны использовать знак "@" при именовании параметров в кодовой части его использования. Вы должны использовать его только в строке SQLCOMMAND.

Надеюсь, поможет.

person Pablo Santa Cruz    schedule 10.10.2009

Вы можете установить значение параметра следующим образом:

SqlParameter parameter1 = new SqlParameter("@ClientID", SqlDbType.BigInt);
parameter1.Value = 32;
SqlDataSource2.SelectParameters.Add(parameter1);
person Canavar    schedule 12.06.2009
comment
Это также не работает в C#. Два типа параметров не могут быть преобразованы автоматически, как в примере. - person Brad; 26.07.2019

Неважно... настроил параметр источника данных так, чтобы он принимал значение другого элемента управления.

person thegunner    schedule 12.06.2009
comment
Это действительно хорошее решение. Вы также можете прочитать значение параметра из сеанса. - person Sali Hoo; 11.03.2012

Если вы использовали редактор WYSWIG для создания источника данных и хотите программно обновить параметры SQL, вам необходимо сделать следующее:

Dim strCommand = "SELECT caller_id, phone, name, email FROM callers WHERE client_id=@ClientID"

SqlDataSource2.SelectCommand = strCommand

**SqlDataSource2.SelectParameters.Clear();**

SqlDataSource2.SelectParameters.Add("@ClientID", iClientID)
person StudioWoofa    schedule 19.07.2014

У меня есть решение для переменной из GET в параметр для SelectCommand

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
   Dim p As Parameter = SQLDataSource.SelectParameters("Order_id")
   If IsNothing(p) Then
        SQLDataSource.SelectParameters.Add("Order_id", Server.HtmlEncode(Request.QueryString("Order_id")).ToString())
   End If
End Sub
person Fanda Kučera    schedule 16.05.2015

Вы можете обойти это с помощью события Selecting в SqlDataSource, теперь я знаю, как разочаровывать нужно ограничивать этот тип элементов управления !!!

Другой альтернативой может быть добавление HiddenField в вашу форму, и SqlDataSource может получить оттуда свое значение.

person Jhonny D. Cano -Leftware-    schedule 12.06.2009

Вот версия ВБ:

Dim parameter As New System.Web.UI.WebControls.Parameter("ClientID", Data.DbType.Int32)
parameter.DefaultValue = 45
sqlTicketInfo.SelectParameters.Add(parameter)

В версии VB.NET не было возможности фактически установить значение, поэтому вместо этого я установил значение по умолчанию. Значение по умолчанию используется, если значение не инициализировано, поэтому, поскольку мы не можем установить значение, оно в любом случае будет автоматически использовать значение по умолчанию.

person Anton    schedule 20.08.2010