在SQL查询中使用ASP.net变量
仍处于新手阶段,正在进行一个项目。我在谷歌上搜索,一直读到眼睛流血。一定有什么小东西我忽略了。我需要将变量“dNum”传递到SQL查询中。如果我不输入“SelectParameters”,它会告诉我需要声明标量变量,这很有意义。我无法让它拾取变量。。默认值不起作用 有什么建议吗?提前谢谢在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
<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文件中。我的大部分文件都是课堂上的,所以不像我想象的那样耗时。我没有使用存储过程,只是出于移动性的原因留下了查询字符串。在这个时候,它的工作非常好。谢谢我们将在周一公布最终代码。