asp.net NET多行查询文本框中的多个名称并将结果添加到单个网格视图

xytpbqjk  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(119)

我有一个文本框,它的多行特性是活动的。我从数据库中查询在这个文本框中输入的名字,并将结果打印到Gridview1对象中。
但是,当我使用下面的代码时,它只是将文本框中姓氏的结果添加到gridview中。我希望同时获得的结果可以集中显示在单个gridview中。
例如,我想在一个网格视图中集中显示10个名字的姓氏。感谢所有帮助我的人。

protected void btntoplusorgu_Click(object sender, EventArgs e)
{
    var satırlar = txttoplu.Text.Split(new[] { '\r', '\n' });

    foreach (var veri in satırlar)
    {
        string baglanti = ConfigurationManager
                              .ConnectionStrings["TAKS"].ConnectionString;

        using (SqlConnection con = new SqlConnection(baglanti))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            StringBuilder sbCommand = new
                StringBuilder("Select * from Veriler where 1 = 1");

            if (veri.ToString() != "")
            {
                sbCommand.Append(" AND Tckn=@Tckn");
                SqlParameter paramtckn = new
                SqlParameter("@Tckn", veri.ToString());
                cmd.Parameters.Add(paramtckn);
            }
            else
            {
            }

            cmd.CommandText = sbCommand.ToString();
            cmd.CommandType = CommandType.Text;

            con.Open();

            SqlDataReader rdr = cmd.ExecuteReader();
            GridView1.DataSource = rdr;
            GridView1.DataBind();
        }
    }
}

字符串

50few1ms

50few1ms1#

您可以添加多个参数,并仍然享受SQL注入安全代码。
所以,说这个标记:

<div style="float: left; border: solid; height: 240px; padding: 10px">

    <div style="float: left">
        <h3>Enter City(s) to search for</h3>
        <asp:TextBox ID="txtCity" runat="server"
            TextMode="MultiLine"
            Style="height: 145px; width: 260px"></asp:TextBox>
    </div>

    <div style="float: left; margin-top: 25%; border: solid;">
        <asp:Button ID="cmdSearch" runat="server" Text="Search"
            CssClass="btn" OnClick="cmdSearch_Click" />

    </div>
</div>

<div style="float: left; margin-left: 40px">

    <asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False"
        DataKeyNames="ID" CssClass="table table-hover"
        Width="55%"
        ShowHeaderWhenEmpty="true">
        <Columns>
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" />
            <asp:BoundField DataField="City" HeaderText="City" />
            <asp:BoundField DataField="HotelName" HeaderText="HotelName" />
            <asp:BoundField DataField="Description" HeaderText="Description" />
        </Columns>
    </asp:GridView>

</div>

字符串
我们的代码可以是这样的:

protected void cmdSearch_Click(object sender, EventArgs e)
{
    SqlCommand cmdSQL = new SqlCommand("SELECT * FROM tblhotelsA");

    string sWhere = "";
    string[] sCity = txtCity.Text.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.None);

    int i = 0;
    foreach (string City in sCity)
    {
        i++;
        if (sWhere != "") sWhere += ",";
        sWhere += "@" + i;
        cmdSQL.Parameters.Add("@" + i, SqlDbType.NVarChar).Value = City;
    } 

    if (txtCity.Text != "") 
        cmdSQL.CommandText += $" WHERE City IN ({sWhere})";

    GVHotels.DataSource = General.MyRstP(cmdSQL);
    GVHotels.DataBind(); 
}


结果如下:

因此,请注意我们可以自由地向SQL命令对象添加参数,并且在代码添加参数期间,实际上并不需要在该命令对象中包含任何现有SQL。
作为一个参考,帮助例程MyRstP()是一个通用(全局)例程,每次我有一个SQL查询来提取数据时,我都会反复使用它来保存一些键盘。
所使用的例程是这样的:

public static DataTable MyRstP(SqlCommand cmdSQL)
{
    DataTable rstData = new DataTable();

    using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
    {
        using (cmdSQL)
        {
            cmdSQL.Connection = conn;
            conn.Open();
            rstData.Load(cmdSQL.ExecuteReader());
        }
    }
    return rstData;
}

相关问题