これが同じかどうかはわかりませんmysql_fetch_array
が、私はそれを想定しています。を使用IDBCommmand.ExecuteReader
して を作成し、それを使用して を行のすべてのフィールドでIDataReader
埋めることができます。Object[]
例 (SQL サーバーを使用):
// 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# で同じ最終結果 (結果を含む変数) を取得するにはどうすればよいですか?
それは好みの問題です。Enity-Framework、NHibernate、LINQ-To-SQL、または Stackoverflow の Micro-ORM Dapper.NET (私が現在使用しているもの) またはプレーン ADO.NET (上記のように) などの ORM を使用できます。
を手動で入力するカスタム クラスを使用する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 で示したのは 2 つだけです。