0

我有一个带有随机数的数组,如下所示

int[] numbers = new int[5] {2,5,3,7};

另外我的数据库中有一个表,ID中的ID和名称与我的数组具有相同的数值。

  • 2、佩德罗
  • 5、娟
  • 3、克劳迪奥
  • 7、贡萨洛

我需要做的是将数组中的数字与数据库的 id 进行比较,如果它们相等,则显示数据网格中关联的名称

什么想法是在数组上使用 For 循环所以,

for (int i = 0; i <numbers.length; i + +)

并显示并因此获得名称'select value from table where id =' + numbers[i];

我需要太多帮助,希望你能帮助我,谢谢

4

2 回答 2

0

假设您有有效的连接,您可以使用诸如 SqlDataAdapter、DataTable 和 SqlConnection 之类的类来完成包含所需数据的表。您也可以使用稍微不同的查询来获得结果。看看这段代码:

string numList = string.Join(",", numbers.Select(i=>i.ToString()).ToList());
// you need to have connection initialized with connection string
SqlDataAdapter a = new SqlDataAdapter("select value from table where id in (" + numList + ")", connection);
DataTable dt = new DataTable();// the result goes here
a.Fill(dt);// actually querying the database

就是这样 - 您现在从数据库中获得了与您提供的 ID 列表相对应的所有名称。现在您可以在 datagridview 或 datagrid 中显示该列表。

于 2013-02-17T22:48:24.797 回答
0

所以问题可以归结为 ADO.NET 部分,如何valueid

string sql = "SELECT value FROM dbo.table WHERE id = @id";
var pairs = new List<Tuple<int, string>>();
using (var con = new SqlConnection(yourConnectionString))
using (var cmd = new SqlCommand(sql, con))
{
    con.Open();
    foreach (int i in numbers)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@id", i);
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                pairs.Add(Tuple.Create(i, dr.GetString(0)));
            }
        }
    }
}

我使用List<Tuple<int, string>>as 集合来存储所有 ID 和名称,您可以将其用作数据源或进一步处理(我不知道您是否只想显示在表中具有名称的 ID)。您可以通过这种方式访问​​ ID + 名称:

foreach(var pair in pairs)
{
    int id = pair.Item1;
    string name = pair.Item2;
}

请注意,我使用了using-statement 来确保所有非托管资源都尽快得到处理。这也将关闭连接。

始终使用参数来防止 sql-injection 或转换问题,即使您目前不容易受到它的影响。

于 2013-02-17T22:54:22.317 回答