[英]how to get SELECT * FROM TABLE results into more than one variable in c#
我在數據庫中有一個3列的表,並且我有一個SELECT查詢,像這樣:
cmd.CommandText = ("SELECT * FROM Game WHERE gameID = " + game_id);
該表具有: gameID, Player1, Player2
。 我的目的是將表中的玩家名稱(Player1, Player2)
轉換為C#中的2個變量,以便我可以使用它們以表格形式顯示。 我嘗試使用cmd.executeScalar()
但它只給我一個結果,而不是2。
請問我該怎么做?
首先,一些重要的建議:
不要使用SELECT *
。 您可能會得到與您想像不同的東西(例如,如果同時更改了數據庫模式)。 而是明確指定您感興趣的每個列。
代替使用字符串連接將SQL查詢粘合在一起,而使用@parameterized
查詢。 出於性能(查詢緩存)和安全性(防止SQL注入攻擊)的原因,這是遵循的好原則。
因此,您的代碼變為:
cmd.CommandText = "SELECT Player1, Player2 FROM Game WHERE gameID = @gameId";
cmd.Parameters.AddWithValue("@gameId", game_id);
現在,你的問題:如何獲得的值Player1
和Player2
每個記錄的? 那就是IDataReader
的所在。數據讀取器是結果表上的僅向前游標,它使您可以訪問每個返回記錄的值:
// 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
}
}
根據ExecuteScalar
文檔 :
執行查詢,並返回查詢返回的結果集中第一行的第一列。 其他列或行將被忽略。
您必須改為使用ExecuteReader
。 同樣,您的代碼也容易受到SQL注入的攻擊。
考慮使用類似這樣的東西:
using (SqlConnection cnn = new SqlConnection(cnnString))
{
cnn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Game WHERE gameID = @gameID", cnn))
{
cmd.Parameters.AddWithValue("@gameID", game_id);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
var player1 = rdr.GetString(1);
var player2 = rdr.GetString(2);
}
}
}
通過使用這樣的塊,您可以獲得三件事:
使用cmd.ExecuteReader();
而不是executeScalar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.