技术求助:如何将DataTable返回至调用方法并实现对象转DataTable
解决DataTable返回与转换问题
嘿,先帮你揪出代码里的一个小错误——你在Create_DataTable方法里创建的DataTable变量是dataTable,但最后return的是Work_Orders,这是你给DataTable起的TableName,不是变量名,这会直接编译报错的!先把这个修正,再解决类型转换的问题。
下面给你两种可行的解决方案,优先推荐第一种:
方案1:直接修改方法返回类型(最优选择)
完全没必要让方法返回object,直接把返回类型改成DataTable,这样调用时能直接拿到目标类型,不用额外转换,代码更清晰简洁。
修改后的Tables类代码:
public static class Tables { 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; // 修正为返回创建好的dataTable变量 } }
调用代码也能直接接收并添加到DataSet:
string SQL = "SELECT ....."; DataTable workOrdersTable = Tables.Create_DataTable(SQL); // 直接添加到你的DataSet中 yourDataSet.Tables.Add(workOrdersTable);
方案2:若无法修改方法返回类型,转换object为DataTable
如果因为某些限制必须保持方法返回object,可以用以下两种方式转换:
方式A:显式强制转换(确定返回值一定是DataTable时用)
string SQL = "SELECT ....."; object result = Tables.Create_DataTable(SQL); DataTable workOrdersTable = (DataTable)result; yourDataSet.Tables.Add(workOrdersTable);
注意:如果返回的
object不是DataTable实例,这种方式会抛出InvalidCastException异常,适合你能确保返回类型的场景。
方式B:使用as关键字安全转换(避免异常)
string SQL = "SELECT ....."; object result = Tables.Create_DataTable(SQL); DataTable workOrdersTable = result as DataTable; if (workOrdersTable != null) { yourDataSet.Tables.Add(workOrdersTable); } else { // 这里可以处理转换失败的情况,比如记录日志或提示错误 }
as关键字会尝试转换,转换失败时返回null,不会抛出异常,更安全。
内容的提问来源于stack exchange,提问作者Dave Hampel
相关产品推荐
相关产品推荐

