2015-11-24 5 views
1

Еще на стадии новичка и есть проект на работе. Я искал google и читал, пока у моего глаза не кровоточит. Должно быть что-то маленькое, что я пропускаю. Мне нужно передать переменную dNum в SQL-запрос. Если я не поставлю «SelectParameters», это скажет мне, что мне нужно объявить скалярную переменную, что имеет смысл. Я не могу заставить его забрать переменную .. значение по умолчанию действительно работает.Использование переменной ASP.net в SQL-запросе

Любые указатели? Заранее спасибо.

<asp:TextBox ID="dNumber" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Go!" OnClick="runQuery" />  
       <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:Door_Clearance %>" 

     SelectCommand="SELECT a.Name, c.Name, c.Description 
     FROM [SWHSystem].[dbo].[Door] AS a 
     JOIN [SWHSystem].[dbo].[ClearanceItem] AS b ON a.ObjectID=b.DoorID 
     JOIN [SWHSystem].[dbo].[Clearance] AS c ON b.ClearanceID=c.ObjectID 
      WHERE a.Name LIKE @dNum1">  


     <SelectParameters> <asp:SessionParameter Name="dNum1" 
     SessionField="dNum" 
     DefaultValue='%1500%'/></SelectParameters> 
     </asp:SqlDataSource> 

В файле .cs ..

protected void runQuery(object sender, EventArgs e) 
    { 
     string dNum = "'%" + dNumber.Text + "%'"; 
     //SqlDataSource1.SelectParameters.Add("dNum1", dNum); 
     SqlDataSource1.SelectParameters["dNum1"].DefaultValue = "dNum"; 

    } 
+0

Попробуйте вместо этого использовать «ControlParameter» и привяжите его к элементу управления 'dNumber'. В настоящее время вы используете 'SessionParameter', который попытается извлечь значение из' Session'. – user1429080

+0

Пробовал несколько вариантов и никогда не мог заставить его работать. В конце концов, переместите его в код .cs, и он работает наконец. –

ответ

2

Во-первых, вы должны использовать хранимую процедуру для запроса:

CREATE PROCEDURE dbo.SelectDoor 
    @dNum1 NVARCHAR(100) 
AS 
BEGIN 
    SET NOCOUNT ON; 

SELECT a.Name, c.Name, c.Description 
     FROM [SWHSystem].[dbo].[Door] AS a 
     JOIN [SWHSystem].[dbo].[ClearanceItem] AS b ON a.ObjectID=b.DoorID 
     JOIN [SWHSystem].[dbo].[Clearance] AS c ON b.ClearanceID=c.ObjectID 
      WHERE a.Name LIKE '%'[email protected]+'%' 
END; 

Далее вызвать хранимую процедуру в файле CS что-то вроде этого:

using (SqlConnection connection = new SqlConnection(<your connection string>)) 
{ 
    using (SqlCommand scmd = new SqlCommand("[dbo].[SelectDoor]", connection)) 
    { 
     connection.Open(); 
     scmd.CommandType = CommandType.StoredProcedure; 
     scmd.Parameters.AddWithValue("@dNum1 ", dNumber.Text); 
     //do something 
     connection.Close();     
    } 
} 

Вы также можете подключить источник данных в разметке что-то вроде этого:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Door_Clearance %>" SelectCommand="SelectDoor" SelectCommandType="StoredProcedure"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="dNumber" Name="dNum1" PropertyName="Text" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

Тогда вы можете просто DataBind любой элемент управления использует этот источник данных в файле отделенного кода (.cs).

+0

, когда вы меняете какой-то стиль программирования другим, покажите его полностью, пожалуйста. Вы также должны показать, что этот результат процедуры для sqldatasource и databind, caz 'может быть, он точно не знает, как это сделать. – Khazratbek

+0

@morgb. Я в конечном итоге переместил весь код в файл .cs. У меня было большинство моих файлов из класса, поэтому было не так много времени, как я ожидал. Я не использовал хранимую процедуру, но просто оставил строку запроса для мобильности. В это время он отлично работает. Благодаря! .. Посмотрите на отправку окончательного кода в понедельник. –

Смежные вопросы