使用CommandType.Tabledirect的目的是什么

时间:2013-01-07 06:57:11

标签: c# asp.net sql-server-2008 system.data

我可能会使用直接查询从表中检索记录,有时也会使用存储过程。我在使用SP时将命令类型称为CommandType.StoredProcedure。我还看到另一个名为CommandType.Tabledirect的选项,在其他地方搜索,但不清楚它。任何人都可以帮助我了解它吗?请给我一些示例代码。

1 个答案:

答案 0 :(得分:35)

CommandType包含指定如何解释命令字符串的名称。

  1. CommandType.Text用于SQL文本命令。 (默认。)
  2. CommandType.StoredProcedure获取存储过程的名称。
  3. CommandType.TableDirect表示表格的名称
  4. 当您调用其中一个Execute方法时,将返回指定表的所有行和列。

    注意:仅 OLE DB 的.NET Framework数据提供程序支持 TableDirect 。当CommandType设置为 TableDirect 时,不支持多表访问。

    示例如何使用:

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

    插入/更新

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