如何将SELECT*FROM TABLE结果转换为c#中的多个变量

Shi*_*ivo 0 c# sql sql-server select sqlcommand

我在DB中有一个包含3列的表,我有一个SELECT查询,如下所示:

cmd.CommandText = ("SELECT * FROM Game WHERE gameID = " + game_id);
Run Code Online (Sandbox Code Playgroud)

这张桌子有:gameID, Player1, Player2.我的目的是(Player1, Player2)将表中的玩家名称变成C#中的2个变量,这样我就可以使用它们在表单中显示.我试图使用cmd.executeScalar()它,但它只给我一个结果,而不是2.

我该怎么办?

sta*_*ica 7

首先,一些重要的建议:

  • 不要用SELECT *.您可能会得到与您的想法不同的东西(例如,如果数据库架构在此期间已更改).而是明确指定您感兴趣的每一列.

  • 不使用字符串连接将SQL查询粘合在一起,而是使用@parameterized查询.出于性能(查询缓存)和安全性(防止SQL注入攻击)的原因,这是一个很好的原则.

所以你的代码变成:

cmd.CommandText = "SELECT Player1, Player2 FROM Game WHERE gameID = @gameId";
cmd.Parameters.AddWithValue("@gameId", game_id);
Run Code Online (Sandbox Code Playgroud)

现在问题:如何接收每条记录的值Player1Player2?这就是IDataReaders进来的地方.数据读取器是结果表上的只向前游标,允许您访问每个返回记录的值:

// SqlConnection connection = cmd.Connection;
connection.Open();
using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
    int player1Index = reader.GetOrdinal("Player1");
    int player2Index = reader.GetOrdinal("Player2");
    while (reader.Read())  // one loop iteration per record returned from SELECT
    {
        string player1 = cmd.GetString(player1Index);
        string player2 = cmd.GetString(player2Index);
        … // do something with player1, and player2
    }        
}
Run Code Online (Sandbox Code Playgroud)