Vra

Wat is die eenvoudigste manier om aan te sluit en navraag 'n databasis vir 'n stel van rekords in C #?

Was dit nuttig?

Oplossing

@Goyuix - dis uitstekend vir iets geskryf uit die geheue. getoets dit hier - het gevind dat die verband is nie geopen. Anders baie mooi.

using System.Data.OleDb;
...

using (OleDbConnection conn = new OleDbConnection())
{
    conn.ConnectionString = "Provider=sqloledb;Data Source=yourServername\\yourInstance;Initial Catalog=databaseName;Integrated Security=SSPI;";

    using (OleDbCommand cmd = new OleDbCommand())
    {
        conn.Open();
        cmd.Connection = conn;
        cmd.CommandText = "Select * from yourTable";

        using (OleDbDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                Console.WriteLine(dr["columnName"]);
            }
        }
    }
}

Ander wenke

Baie min en van geheue, want ek het nie kode op hierdie laptop het:

using (OleDBConnection conn = new OleDbConnection())
{
  conn.ConnectionString = "Whatever connection string";

  using (OleDbCommand cmd = new OleDbCommand())
  {
    cmd.Connection = conn;
    cmd.CommandText = "Select * from CoolTable";

    using (OleDbDataReader dr = cmd.ExecuteReader())
    {
      while (dr.Read())
      {
        // do something like Console.WriteLine(dr["column name"] as String);
      }
    }
  }
}

Dit is beslis 'n goeie manier om dit te doen. Maar as jy gebeur om die gebruik van 'n databasis wat LINQ ondersteun om SQL, dit kan 'n baie meer pret wees. Dit kan soos volg lyk:

MyDB db = new MyDB("Data Source=...");
var q = from db.MyTable
        select c;
foreach (var c in q)
  Console.WriteLine(c.MyField.ToString());

Dit is 'n alternatiewe manier (DataReader is vinniger as hierdie een):

string s = "";
SqlConnection conn = new SqlConnection("Server=192.168.1.1;Database=master;Connect Timeout=30;User ID=foobar;Password=raboof;");
SqlDataAdapter da = new SqlDataAdapter("SELECT TOP 5 name, dbid FROM sysdatabases", conn);
DataTable dt = new DataTable();

da.Fill(dt);

for (int i = 0; i < dt.Rows.Count; i++)
{
    s += dt.Rows[i]["name"].ToString() + " -- " + dt.Rows[i]["dbid"].ToString() + "\n";
}

MessageBox.Show(s);

As jy van plan is op die lees van 'n groot aantal kolomme of rekords is dit ook die moeite werd kas die ranggetalle en toegang tot die sterk-getik metodes, Bv.

using (DbDataReader dr = cmd.ExecuteReader()) {
  if (dr.Read()) {
    int idxColumnName = dr.GetOrdinal("columnName");
    int idxSomethingElse = dr.GetOrdinal("somethingElse");

    do {
      Console.WriteLine(dr.GetString(idxColumnName));
      Console.WriteLine(dr.GetInt32(idxSomethingElse));
    } while (dr.Read());
  }
}

As jy die gebruik daarvan 'n SQL Server databasis (weergawe 7 en ouer) jy moet die OLEDB klasse met ooreenstemmende klasse in die System.Data.SqlClient naamruimte ( SqlConnection , SqlCommand en SqlDataReader ) as dié klasse is geoptimaliseer om te werk met SQL Server.

Nog 'n ding om daarop te let is dat jy moet 'nooit' kies al as dit kan lei tot onverwagte resultate later op as jy kolomme te voeg of te verwyder na hierdie tafel.

Ek dink, jy kan entiteit raamwerk probeer.

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
     IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>();
     //do something with courselist here
}

Klag die biblioteke

using MySql.Data.MySqlClient;

Dit is die verband:

public static MySqlConnection obtenerconexion()
        {
            string server = "Server";
            string database = "Name_Database";
            string Uid = "User";
            string pwd = "Password";
            MySqlConnection conect = new MySqlConnection("server = " + server + ";" + "database =" + database + ";" + "Uid =" + Uid + ";" + "pwd=" + pwd + ";");

            try
            {
                conect.Open();
                return conect;
            }
            catch (Exception)
            {
                MessageBox.Show("Error. Ask the administrator", "An error has occurred while trying to connect to the system", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return conect;
            }
        }
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top