2008-08-04 19 views

Trả lời

30

@Goyuix - đó là tuyệt vời cho một cái gì đó bằng văn bản từ bộ nhớ. đã kiểm tra ở đây - thấy rằng kết nối không được mở. Nếu không thì rất hay.

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

Rất gần và từ bộ nhớ kể từ khi tôi không có mã trên máy tính xách tay này:

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

Đó chắc chắn là một cách hay để thực hiện. Nhưng nếu bạn tình cờ sử dụng cơ sở dữ liệu hỗ trợ LINQ to SQL, nó có thể thú vị hơn rất nhiều. Nó có thể giống như thế này:

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

Đây là một cách thay thế (DataReader là nhanh hơn này):

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

Nếu bạn đang truy vấn một cơ sở dữ liệu SQL Server (Phiên bản 7 trở lên) bạn nên thay thế các lớp OleDb với các lớp tương ứng trong không gian tên System.Data.SqlClient (SqlConnection, SqlCommandSqlDataReader) vì các lớp đó đã được tối ưu hóa để làm việc với SQL Server.

Một điều cần lưu ý là bạn nên 'không bao giờ' chọn tất cả vì điều này có thể dẫn đến kết quả không mong muốn sau này nếu bạn thêm hoặc xóa cột vào bảng này.

4

Nếu bạn dự định đọc một số lượng lớn các cột hoặc bản ghi, nó cũng đáng lưu vào bộ nhớ đệm của các phân số và truy cập các phương pháp được đánh máy mạnh, ví dụ:

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

Tôi đoán, bạn có thể thử khung thực thể.

using (SchoolDBEntities ctx = new SchoolDBEntities()) 
{ 
    IList<Course> courseList = ctx.GetCoursesByStudentId(1).ToList<Course>(); 
    //do something with courselist here 
} 
Các vấn đề liên quan