3

C#/ASP.NET を学習していますが、次の PHP コードに相当する C# は何ですか? ユーザー ID はわかっているので、このテーブルから変数 "row" の配列に行をフェッチしたいので、それを "row['name']" および "row['email'].

$result = mysql_query("SELECT email, name FROM mytable WHERE id=7");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    printf("Email: %s  Name: %s", $row["email"], $row["name"]);
}

ありがとう。

4

5 に答える 5

5

これが同じかどうかはわかりません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 つだけです。

于 2012-06-30T20:00:13.697 に答える
2

真の同等物はありません。過去に PHP 開発者だったので、最も近いのはデータ アダプターを使用してデータ テーブルに入力することだと思います。これはDbDataAdapter.Fillへの参照です。

MySql ドライバーについてはよくわかりませんが、Sql Server を使用している場合は、開始するためのコードを次に示します。

using (var connection = new SqlConnection(connectionString))
{
    var table = new DataTable("tbl_objects");
    var adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand("SELECT * FROM tbl_name", connection);
    adapter.Fill(table);
}

次に、テーブル内の行を反復処理できます。

foreach(var row in table)
{
    Console.WriteLine("{0}", row["ColumnName"]);
}
于 2012-06-30T20:15:56.137 に答える
0

次のように、foreach ループを使用して結果をループできます。

  foreach(var row in result)
  { 
      console.writeline("Email:" + row.Email, "Name:", row.Name);
  }

それはあなたが探していたものですか?

編集

実際、結果が 1 つしかないことを確認しました。

次に、 foreach ループを完全にスキップできます

于 2012-06-30T19:38:40.960 に答える
0

.net で最も近いものは次のようなものです...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            var foo = MySqlHelper.ExecuteDataRow("Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;", "select * from foo");
            Console.WriteLine(foo["Column"]);
        }
    }
}

MySql Data Connector http://dev.mysql.com/downloads/connector/net/を使用していると思います

.net でデータベースに接続するためのより良い方法があることに注意してください。

于 2012-06-30T21:39:45.633 に答える
0

データベースへの接続が必要です。

mysql と odbc 接続を使用していると仮定します。

var connectionString = "DRIVER={MySQL ODBC 3.51 Driver};" +
                     "SERVER=localhost;" +
                     "DATABASE=test;" +
                     "UID=venu;" +
                     "PASSWORD=venu;" +
                     "OPTION=3");


using (OdbcConnection connection = new OdbcConnection(connectionString))
{
    OdbcCommand command = new OdbcCommand("SELECT email, name FROM mytable WHERE id=7", connection);

    connection.Open();

    // Execute the DataReader and access the data.
    OdbcDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        //do stuff with the data here row by row the reader is a cursor
    }

    // Call Close when done reading.
    reader.Close();

代わりに、配列のように使用できるテーブル内のすべての結果が必要な場合は、odbcdataadapter とデータテーブルを使用できます。

于 2012-06-30T20:04:50.763 に答える