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
25
A
Odpowiedz
33
CommandType zawiera nazwy określające sposób interpretowania ciągu poleceń.
CommandType.Text
dla polecenia tekstowego SQL. (Domyślnie).- dla nazwy procedury składowanej.
- 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));
}
Czy to możliwe, aby przeprowadzić aktualizacji/Wstaw/Usuń działania poprzez TableDirect.if tak, możesz również zamieścić kod tego. –
Właśnie zaktualizowałem moją odpowiedź .. @ faheemkhan –
Dzięki, przejrzę to. –