如何将DataTable传递回调用方法?

时间:2018-01-02 07:36:31

标签: c# object datatable

我一直试图将DataTable传递回调用方法。以下是调用Class来创建DataTable

的代码
string SQL = "SELECT .....";
Tables.Create_DataTable(SQL);

以下是课程Tables的代码。

public static class Tables
{
    internal static object Create_DataTable(string SQL)
    {
        DataTable dataTable = new DataTable("Work_Orders");

        using (DataAccessClass.sql_Connection)
        using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(SQL, DataAccessClass.sql_Connection))
        {
            DataAccessClass.OpenConnection();

            sqlDataAdapter.Fill(dataTable);
        }

        return Work_Orders;
    }
}

sqlDataAdapter.Fill(dataTable);之后,有Work_Orders DataTable包含所请求的数据。在返回时,我意识到DataTable实际上是object。这是我被卡住的地方。如何将object更改为DataTable?然后我将其添加到DataSet

1 个答案:

答案 0 :(得分:3)

您应该从您的方法返回dataTable,但作为签名的基本问题应该是:

attributes modifiers return-type method-name(parameters )
    {
     statements
    }

查看HereHere

但改变你的方法,如:

internal static DataTable Create_DataTable(string SQL)
{
    DataTable dataTable = new DataTable("Work_Orders");

    using (DataAccessClass.sql_Connection)
    using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(SQL, DataAccessClass.sql_Connection))
    {
        DataAccessClass.OpenConnection();

        sqlDataAdapter.Fill(dataTable);
    }

    return dataTable;
}

修改

1-避免从方法

返回Object

2-避免从方法中返回DataTable

因为它们都使你的代码不可读和不干净,所以最好返回一个指定的对象,例如假设你的DataTable有一些关于用户的文件,那么最好是这样的:

如果DataTable有一行:

internal static User Create_DataTable(string SQL)
{
    DataTable dataTable = new DataTable("Work_Orders");

    using (DataAccessClass.sql_Connection)
    using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(SQL, DataAccessClass.sql_Connection))
    {
        DataAccessClass.OpenConnection();

        sqlDataAdapter.Fill(dataTable);
    }
     User u = new User()
       { 
          Name = dataTable.Rows[0]("Name"),
          Family = dataTable.Rows[0]("Family"),
          UserName = dataTable.Rows[0]("UserName")
        }
    return u;
}

或者如果DataTable有几个用户的信息(有一些行):

internal static List<User> Create_DataTable(string SQL)
{
    DataTable dataTable = new DataTable("Work_Orders");

    using (DataAccessClass.sql_Connection)
    using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(SQL, DataAccessClass.sql_Connection))
    {
        DataAccessClass.OpenConnection();

        sqlDataAdapter.Fill(dataTable);
    }
     List<User> uList = new List<User>();
     foreach (DataRow row in Datatable.Rows) 
     { 
         uList.Add(new User()
              { 
                   Name = row["Name"],
                   Family = row["Family"],
                   UserName = row["UserName"]
               });
      }
    return uList;
}

以上代码只是样本。