2013-01-07 16 views
25

Prawdopodobnie używam bezpośrednich zapytań do pobierania rekordów z tabeli, a także Przechowywana procedura kilka razy. Wspominam o typie polecenia jako CommandType.StoredProcedure podczas używania SP. Widzę także inną opcję o nazwie CommandType.Tabledirect, przeszukiwano gdzie indziej, ale nie było to jasne. Czy ktokolwiek może mi pomóc w uzyskaniu pomysłu na ten temat? Proszę podać mi kilka przykładowych kodów.Jaki jest cel używania CommandType.Tabledirect

Odpowiedz

33

CommandType zawiera nazwy określające sposób interpretowania ciągu poleceń.

  1. CommandType.Text dla polecenia tekstowego SQL. (Domyślnie).
  2. dla nazwy procedury składowanej.
  3. dla nazwy nazwa tabeli.

Wszystkie wiersze i kolumny nazwanej tabeli zostaną zwrócone po wywołaniu jednej z metod Execute.

UWAGA: TableDirect jest obsługiwana tylko przez Dostawcę Framework danych dla OLE DB. Dostęp do wielu tabel nie jest obsługiwany, gdy parametr CommandType ma wartość TableDirect.

przykład próbki, jak to jest wykorzystywane:

OleDbConnection myOleDbConnection =new OleDbConnection("provider=sqloledb;server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI"); 
OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); 

myOleDbCommand.CommandType = CommandType.TableDirect; 

myOleDbCommand.CommandText = "Employee"; 

myOleDbConnection.Open(); 

OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader(); 

for (int count = 1; count <= 2; count++) 
{ 
    myOleDbDataReader.Read(); 
    Console.WriteLine("myOleDbDataReader[\" ID\"] = " + 
    myOleDbDataReader["ID"]); 
    Console.WriteLine("myOleDbDataReader[\" FirstName\"] = " + 
    myOleDbDataReader["FirstName"]); 
    Console.WriteLine("myOleDbDataReader[\" LastName\"] = " + 
    myOleDbDataReader["LastName"]); 
} 
myOleDbDataReader.Close(); 
myOleDbConnection.Close(); 

Insert/Aktualizacja

 try 
     { 
      using (SqlCeCommand command = conn.CreateCommand()) 
      { 
       command.CommandText = "Holdings"; 
       command.CommandType = CommandType.TableDirect; 
       using (SqlCeResultSet rs = command.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable)) 
       { 
        SqlCeUpdatableRecord record = rs.CreateRecord(); 
        foreach (var r in _commitBatch) 
        { 
         int index=0; 
         record.SetValue(index++, r.TryGetValueOrDefault("IdentifierFromImportSource",string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("SecurityID", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("SecurityName", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("SecurityType", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("AllocationAmount", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("Position", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("AnnualFeePercent", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("MarginAmount", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("Price", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("MorningstarSecId", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("MorningstarSecType", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("UserID", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("MorningstarPrice", string.Empty)); 
         record.SetValue(index++, string.Empty); 
         record.SetValue(index++, r.TryGetValueOrDefault("AnnualFeeFrequency", string.Empty)); 
         record.SetValue(index++, r.TryGetValueOrDefault("TrackingMethod", "1")); 
         rs.Insert(record); 
        } 
       } 

      } 

     } 
     catch (Exception e) 
     { 
      NotifyError(this, new ImportErrorEventArgs(e.Message + e.StackTrace, ErrorLevel.Application)); 
     } 
+0

Czy to możliwe, aby przeprowadzić aktualizacji/Wstaw/Usuń działania poprzez TableDirect.if tak, możesz również zamieścić kod tego. –

+0

Właśnie zaktualizowałem moją odpowiedź .. @ faheemkhan –

+0

Dzięki, przejrzę to. –