我有这个对象,我通过将它们作为对象返回来处理我的所有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然后返回到列表但是这似乎没有任何可能的方法从对象转换为datatable。
非常感谢任何帮助,如果我没有包含一些东西,请随时告诉我。
似乎与this question相似。不幸的是,你不能在C#中做这样的事情,但有一些解决方法。
调用方法时,请尝试:
DataTable newDT = (DataTable)QuerySql();
在调用它时强制转换对象。
您可以尝试的另一件事是为每种返回类型创建相同的方法。例如:
private DataTable DTQuerySql(string QueryString, string QueryType = "select")
{
return (DataTable)QuerySql(QueryString, "datatable", QueryType)
}