【问题标题】:Using ASP.net variable in SQL query在 SQL 查询中使用 ASP.net 变量
【发布时间】:2015-11-24 16:35:07
【问题描述】:

仍处于新手阶段,并且有一个项目在进行中。我搜索了谷歌并阅读直到我的眼睛流血。必须有一些我忽略的小东西。我需要将变量“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>

在.cs文件中..

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

    }

【问题讨论】:

  • 尝试使用ControlParameter 并让它引用dNumber 控件。目前您正在使用SessionParameter,它将尝试从Session 获取您的值。
  • 尝试了几种变体,但始终无法正常工作。最终将其移至 .cs 代码,它终于可以工作了。

标签: sql asp.net variables using


【解决方案1】:

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

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>

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

【讨论】:

  • 当你用另一种编程风格改变时,请充分展示它。您还必须显示将此过程结果附加到 sqldatasource 和 databind,因为他可能不知道该怎么做。
  • @morgb。我确实最终将所有代码移至 .cs 文件。我的大部分文件都来自课堂,所以没有我预期的那么耗时。我没有使用存储过程,但出于移动性原因只留下了查询字符串。此时它工作得很好。谢谢! .. 将在周一发布最终代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多