首页 > 解决方案 > C#:在文本框中查询多列

问题描述

这是我的代码,我希望能够搜索名称,然后从数据库中将名称、状态、member_id 提取到表单中的文本框中。

我得到了可以使用的名称,但是如何获取其他列并将输出解析到带有附加列(member_id、status)的文本框中?假设其他文本框具有标准名称,例如 textbox2、3、4...

string connetionString = null;
SqlConnection connection;
SqlCommand command;

string sql = null;
string sql1 = null;

SqlDataReader dataReader;

connetionString = "Data Source=......"
sql = "SELECT NAME FROM Test_Employee WHERE Name LIKE '" + textBox1.Text.ToString() + "%'";
connection = new SqlConnection(connetionString);
{
    connection.Open();

    command = new SqlCommand(sql, connection);
    dataReader = command.ExecuteReader();

    while (dataReader.Read())
    {
        textBox9.Text = dataReader[0].ToString();
        textBox7.Text = dataReader[0].ToString();
    }

    connection.Close();
}

标签: c#sql-server

解决方案


字段Member_IdStatus也在表Test_Employee中吗?您可以将它们添加到您的Select语句中并从您的SqlReader中获取它们,如下面的代码(假设您使用的是c#7及更低版本)。您可以复制并粘贴此代码。

var connectionString = "";
var sql = @"SELECT TOP 1 Name, Member_Id, Status
            FROM Test_Employee 
            WHERE Name LIKE @name + '%'";

using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.Add("name", SqlDbType.NVarChar, 100).Value = textBox1.Text.ToString();
    connection.Open();
    var reader = command.ExecuteReader();
    if (reader.Read())
    {
        textBox9.Text = dataReader["Name"].ToString();
        textBox7.Text = dataReader["Name"].ToString();
        textBox2.Text = dataReader["Member_Id"].ToString();
        textBox3.Text = dataReader["Status"].ToString();

    }
}

您会注意到,不是将 Textbox1.Text 的值包含在 Select 语句中,而是作为参数添加到SQLCommand对象的Parameters. 通过这种方式,您的查询免受SQL Injection的影响。如果您想了解更多信息,可以搜索c# sqlcommand 参数以及为什么以这种方式构建数据访问代码非常重要。

另外,请注意我Top 1在您的 Select 语句中添加了,而不是 using while,而是使用if. 这是因为文本框一次只能以易于理解的方式保存 1 个结果。如果您想清楚地显示多个结果,则需要使用除 TextBox 之外的其他控件。

这些using语句允许您处理连接,因此您不必调用connection.Close().


推荐阅读