我应该使用SqlDataReader或SqlDataAdapter类来返回数据表

时间:2013-06-02 15:21:38

标签: c# asp.net asp.net-4.0 using sqlconnection

我写了下面的代码。我想知道我是否可以进一步改进它。

public static DataTable GetDepartments()
{
    DataTable dt = new DataTable();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlCommand command = new SqlCommand())
        {
            command.CommandText = "proc_GetDepartments";
            command.CommandType = CommandType.StoredProcedure;

            connection.Open();
            using (SqlDataAdapter da = new SqlDataAdapter(command))
            {
                command.Connection = connection;
                da.Fill(dt);
            }
        }
    }
    return dt;

}

这里我使用了SqlDataAdapter。什么是SqlDataReader编写它的方式。还有哪一个更好。任何帮助/指导都表示赞赏。

2 个答案:

答案 0 :(得分:2)

  

还有哪一个更好?

正如我在comment中所说,它们是两回事。苹果和橘子..

SqlDataAdapter正在使用a DataTable。它可以使用SQL中的表填充DataTableSqlDataReader逐个读取数据库行

在您的情况下,我认为没有理由使用SqlDataReader,因为您想要返回DataTable。转到SqlDataAdapter;)

  

..如果您可以使用。

添加SqlDataReader的代码

不确定。但正如我所说,您不能将DataTableSqlDataReader一起使用。但是嘿..以下是使用SqlDataReader;

获取值的方法
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    int firstcell = reader.GetInt32(0);    // I assume your first column is int.
    string secondcell = reader.GetString(1);  // I assume your second column is string.
    string thirdcell = reader.GetString(2); // I assume your third column is string.
    Console.WriteLine("FirstCell = {0}, SecondCell = {1}, ThirdCell = {2}", firstcell, secondcell , thirdcell);
}

答案 1 :(得分:1)

如果要循环每个记录并在循环中执行一些操作数据,请使用SqlDataReader,但是如果要将数据放在数据集或数据表上,然后想将其绑定到asp.net控件(例如:GridView) ,ComboBox等)然后使用SqlDataAdapter。

无论如何,这是如何使用SqlDataReader。

using System;
    using System.Data.SqlClient;

  class ConnectToSqlConnection {
    static void Main(string[] args)  {
      String sConn = "server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI";

        String sSQL = "select id, firstname, lastname from Employee";

      SqlConnection oConn = new SqlConnection(sConn);
      oConn.Open();

      SqlCommand oCmd = new SqlCommand(sSQL, oConn);
      SqlDataReader oReader = oCmd.ExecuteReader();

      int idxID = oReader.GetOrdinal("id");
      int idxFirstName = oReader.GetOrdinal("firstname");
      int idxLastName = oReader.GetOrdinal("lastname");

      while(oReader.Read()) {
        Console.WriteLine("{0} {1} {2}",
          oReader.GetValue(idxID),
          oReader.GetValue(idxFirstName),
          oReader.GetValue(idxLastName));
      }
    }