在SQL查询中使用ASP.net变量

在SQL查询中使用ASP.net变量,sql,asp.net,variables,using,Sql,Asp.net,Variables,Using,仍处于新手阶段,正在进行一个项目。我在谷歌上搜索,一直读到眼睛流血。一定有什么小东西我忽略了。我需要将变量“dNum”传递到SQL查询中。如果我不输入“SelectParameters”,它会告诉我需要声明标量变量,这很有意义。我无法让它拾取变量。。默认值不起作用 有什么建议吗?提前谢谢 <asp:TextBox ID="dNumber" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="ser

仍处于新手阶段,正在进行一个项目。我在谷歌上搜索,一直读到眼睛流血。一定有什么小东西我忽略了。我需要将变量“dNum”传递到SQL查询中。如果我不输入“SelectParameters”,它会告诉我需要声明标量变量,这很有意义。我无法让它拾取变量。。默认值不起作用

有什么建议吗?提前谢谢

<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>

首先,您应该使用存储过程进行查询:

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 '%'+@dNum1+'%'
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>
使用(SqlConnection=newsqlconnection())
{
使用(SqlCommand-scmd=new-SqlCommand(“[dbo].[SelectDoor]”,连接))
{
connection.Open();
scmd.CommandType=CommandType.StoredProcess;
scmd.Parameters.AddWithValue(“@dNum1”,dNumber.Text);
//做点什么
connection.Close();
}
}
您还可以在标记中连接数据源,如下所示:

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>


然后,您可以在codebehind(.cs)文件中对使用此数据源的任何控件进行数据绑定

尝试改用
ControlParameter
,并使其引用
dNumber
控件。当前,您正在使用一个
SessionParameter
,该参数将尝试从
会话
获取值。尝试了几种变体,但始终无法使其工作。。最后将它移到.cs代码中,它终于可以工作了。当您用另一种编程风格更改某些编程风格时,请将其完全显示出来。您还必须显示将此过程结果附加到sqldatasource和databind的过程,因为他可能不知道如何做。@morgb。我确实把所有的代码移到了.cs文件中。我的大部分文件都是课堂上的,所以不像我想象的那样耗时。我没有使用存储过程,只是出于移动性的原因留下了查询字符串。在这个时候,它的工作非常好。谢谢我们将在周一公布最终代码。