我正在开发一个项目,该项目需要列出所有数据源,连接它们然后从它们中获取表列表,它们的列以及稍后的查询构建器以查询它们并获取数据。这里棘手的部分是查询Builder并传递查询并直接从数据源获取数据(比如oracle,ms sql server,ms access等)
目前我正在获取所有数据(作为数据集或数据表)并解析它们以获取不可靠的输出。
这是可能的还是最佳方法来实现这一目标?
我尝试的代码。
public DataTable GetDataTableforMSAccess(string strSQL, string Connstr = "")
{
DataTable dt = new DataTable();
try
{
if ((Connstr == null) || (Connstr.ToString() == ""))
{
//Sample connstr "Provider=Microsoft.ACE.OLEDB.12.0;data source=F:\\NWind.accdb";
Connstr = GetDefaultConnectionString();
}
using (OleDbConnection conn = new OleDbConnection(Connstr))
{
OleDbCommand cmd = new OleDbCommand(strSQL, conn);
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
adapter.Fill(dt);
}
}
catch (Exception ex)
{
LogWrite("GetDataSetforMSAccess :" + ex.Message, true);
}
return dt;
}
同样,我单独尝试了Oracle,MS SQL,My Sql。我需要合并查询并在单个界面中运行,以便我可以获取所需的结果。
编辑:我已经获取了列表,棘手的部分是我需要查询来自多个源的列,然后运行应该包含所需数据库的查询。
答案 0 :(得分:1)
如果所有数据都可以映射到同一个类然后从源读取并将所有数据放在一个IEnumerable中,我只会创建一个模型但是如果有不同的数据我不确定我理解你的问题。 只需从每个位置读取并获取您需要的内容,至少我不知道任何其他解决方案。
答案 1 :(得分:0)
对于这种事情,你需要清楚你想要什么,明确他们想要什么,并明确你的努力是如何做到的。
如果您说您的用户想要跨多个数据源编写查询,那么告诉他们如果没有大量工作就无法完成(插入可怕的数字)。除非所有的cloumns和表名都相同?
如果您撤回数据并将其合并,然后执行旨在针对1个数据源使用的查询,则更好。
所以我要采取的方法是编写一个具有连接数据库所需的所有方法的iterface。然后创建使用接口的类,即MSSQL,Oracle,Access。所以现在在定义你的对象时,你可以实现你需要的东西,即MSSQL或Oracle ...那么方法都是一样的。
因此,一旦获得每个数据源,您就可以合并所有数据。或者只是通过并将数据添加/合并到网格或其他内容。我建议使用映射方法,即Oracle fieldx = MSSQL = field101都成为网格上的名字。
然后用户输入SQL并通过新的SQL过滤每个数据源SQL并重新显示