我不确定这是否相同,mysql_fetch_array
但我假设。您可以使用IDBCommmand.ExecuteReader
创建一个IDataReader
并使用它来填充Object[]
行的所有字段。
例如(使用 SQL-Server):
// use using statements to ensure that connections are disposed/closed (all implementing IDisposable)
using (var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
using (var cmd = new SqlCommand("SELECT email, name FROM mytable WHERE id=@id", con))
{
cmd.Parameters.AddWithValue("@id", ID); // use parameters to avoid sql-injection
con.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var fields = new object[reader.FieldCount];
// following fills an object[] with all fields of the current line,
// is this similar to mysql_fetch_array?
int count = reader.GetValues(fields);
}
}
}
编辑:
我并不是要让它尽可能相似,但是我将如何在 C# 中获得相同的最终结果(带有结果的变量)
那是口味问题。您可以使用某种 ORM,例如 Enity-Framework、NHibernate、LINQ-To-SQL 或 Stackoverflow 的 Micro-ORM Dapper.NET(我目前正在使用的)或普通的 ADO.NET(如上所示)。
您可以使用您手动填充的自定义类,DataReader
或者使用DataTable
自动加载的模式。
例如(这里使用 MySQL):
DataTable tblEmail = new DataTable();
using (var con = new MySqlConnection(Properties.Settings.Default.MySQL))
using (var da = new MySqlDataAdapter("SELECT Email, Name FROM Email WHERE id=@id", con))
{
da.SelectCommand.Parameters.AddWithValue("@id", ID);
da.Fill(tblEmail);
}
if (tblEmail.Rows.Count == 1)
{
DataRow row = tblEmail.Rows[0];
String email = row.Field<String>("Email");
String name = row.Field<String>("Name");
}
如您所见,.NET 中有很多方法。我只用 ADO.NET 展示了两个。