我有这个对象,可以通过将其作为对象返回来处理所有sql查询。在下面列出的方法中,我可以传递3个参数,即sql查询,我想返回的数据类型以及sql是查询还是非查询
private object QuerySql(string QueryString, string DataType = "null", string QueryType = "Select")
{
conn.Open();
if (DataType == "DataTable")
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dataTable);
da.Dispose();
conn.Close();
return dataTable;
}
else if (DataType == "String")
{
dataString = Convert.ToString(cmd.ExecuteScalar());
conn.Close();
return dataString;
}
else if (DataType == "Object")
{
dataObject = cmd.ExecuteScalar();
conn.Close();
return dataObject;
}
else if (DataType == "List")
{
using (SqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
dataList.Add(Reader.GetValue(0));
}
}
conn.Close();
return dataList;
}
else if (QueryType == "Delete")
{
deletedRows = cmd.ExecuteNonQuery();
if (deletedRows > 0)
{
cmd.ExecuteNonQuery();
conn.Close();
return 1;
}
else
{
conn.Close();
return 0;
}
}
else
{
return null;
}
}
非常明确地在该区域
if (DataType == "DataTable")
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dataTable);
da.Dispose();
conn.Close();
return dataTable;
}
它返回一个数据表,但它作为一个对象返回。所以我很好奇是否有一种简单的方法可以将其转换为数据表。
我能够成功地将列表转换为Ilist,然后再返回到列表,但这似乎没有从对象到数据表的任何可能转换方式。
我们将不胜感激,如果没有提供帮助,请随时告诉我。
答案 0 :(得分:1)
似乎类似于this question。不幸的是,您无法在C#中执行类似的操作,但是有解决方法。
调用该方法时,请尝试:
DataTable newDT = (DataTable)QuerySql();
在调用对象时投射对象。
您可以尝试的另一种方法是为每种返回类型创建相同的方法。例如:
private DataTable DTQuerySql(string QueryString, string QueryType = "select")
{
return (DataTable)QuerySql(QueryString, "datatable", QueryType)
}