كيف يمكنني الاتصال بقاعدة بيانات وحلقة أكثر من مجموعة سجلات في C# ؟

StackOverflow https://stackoverflow.com/questions/930

  •  08-06-2019
  •  | 
  •  

سؤال

ما هو أبسط وسيلة للاتصال و الاستعلام عن قاعدة بيانات عن مجموعة من السجلات في C# ؟

هل كانت مفيدة؟

المحلول

@Goyuix-هذا ممتاز على شيء مكتوب من الذاكرة.اختباره هنا وجدت اتصال يكن فتح.وإلا لطيفة جدا.

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"]);
            }
        }
    }
}

نصائح أخرى

جدا تقريبا من الذاكرة منذ ليس لدي رمز على هذا الكمبيوتر المحمول:

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);
      }
    }
  }
}

هذا هو بالتأكيد وسيلة جيدة للقيام بذلك.ولكن إذا كنت يحدث ليكون باستخدام قاعدة البيانات التي تدعم LINQ to SQL, يمكن أن يكون الكثير من المرح.يمكن أن ننظر بشيء من هذا القبيل:

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

هذا هو وسيلة بديلة (DataReader أسرع من هذا واحد):

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);

إذا كنت تنوي على قراءة عدد كبير من الأعمدة أو السجلات كما انه من الجدير التخزين المؤقت الترتيبية و الوصول إلى كتابة بشدة أساليب مثل

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());
  }
}

إذا كنت الاستعلام عن قاعدة بيانات SQL Server (الإصدار 7 وما فوق) يجب أن يحل محل OleDb الطبقات مع الطبقات المقابلة في النظام.البيانات.SqlClient مساحة (SqlConnection, SqlCommand و SqlDataReader) مثل تلك الطبقات الأمثل للعمل مع SQL Server.

شيء آخر هو أن نلاحظ أنه يجب أن "أبدا" حدد كل هذا قد يؤدي إلى نتائج غير متوقعة في وقت لاحق إذا قمت بإضافة أو إزالة الأعمدة إلى هذا الجدول.

أعتقد يمكنك محاولة إطار الكيان.

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

تهمة المكتبات

using MySql.Data.MySqlClient;

هذا هو الرابط:

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;
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top