static public string GetTableSelect(string provider, IDbConnection cn) { if (SqlEntries == null) { RdlEngineConfigInit(); } SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry; if (sce == null) { if (cn != null) { OdbcConnection oc = cn as OdbcConnection; if (oc != null && oc.Driver.ToLower().IndexOf("my") >= 0) // not a good way but ... { return("show tables"); // mysql syntax is non-standard } } return("SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES ORDER BY 2, 1"); } if (cn != null) { OdbcConnection oc = cn as OdbcConnection; if (oc != null && oc.Driver.ToLower().IndexOf("my") >= 0) // not a good way but ... { return("show tables"); // mysql syntax is non-standard } } return(sce.TableSelect); }
static public bool DoParameterReplacement(string provider, IDbConnection cn) { if (SqlEntries == null) { RdlEngineConfigInit(); } SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry; return(sce == null ? false : sce.ReplaceParameters); }
public static IDbConnection GetConnection(string provider, string cstring) { IDbConnection cn = null; switch (provider.ToLower()) { case "sql": // can't connect unless information provided; // when user wants to set the connection programmatically this they should do this if (cstring.Length > 0) { cn = new SqlConnection(cstring); } break; case "odbc": cn = new OdbcConnection(cstring); break; case "oledb": cn = new OleDbConnection(cstring); break; default: if (SqlEntries == null) // if never initialized; we should init { RdlEngineConfigInit(); } SqlConfigEntry sce = SqlEntries[provider] as SqlConfigEntry; if (sce == null || sce.CodeModule == null) { if (sce != null && sce.ErrorMsg != null) // error during initialization?? { throw new Exception(sce.ErrorMsg); } break; } object[] args = new object[] { cstring }; Assembly asm = sce.CodeModule; object o = asm.CreateInstance(sce.ClassName, false, BindingFlags.CreateInstance, null, args, null, null); if (o == null) { throw new Exception(string.Format("Unable to create instance of '{0}' for provider '{1}'", sce.ClassName, provider)); } cn = o as IDbConnection; break; } return(cn); }
static void GetDataSource(IDictionary dsDir, XmlNode xNode) { string provider = null; string codemodule = null; string cname = null; string inter = "SQL"; string tselect = null; bool replaceparameters = false; foreach (XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) { continue; } switch (xNodeLoop.Name) { case "DataProvider": provider = xNodeLoop.InnerText; break; case "CodeModule": codemodule = xNodeLoop.InnerText; break; case "Interface": inter = xNodeLoop.InnerText; break; case "ClassName": cname = xNodeLoop.InnerText; break; case "TableSelect": tselect = xNodeLoop.InnerText; break; case "ReplaceParameters": if (xNodeLoop.InnerText.ToLower() == "true") { replaceparameters = true; } break; default: break; } } if (provider == null) { return; // nothing to do if no provider specified } SqlConfigEntry sce; try { // load the module early; saves problems with concurrency later string msg = null; Assembly la = null; if (codemodule != null && cname != null) { // check to see if the DLL has been previously loaded // many of the DataProvider done by fyiReporting are in a single code module foreach (SqlConfigEntry sc in dsDir.Values) { if (sc.FileName == codemodule && sc.CodeModule != null) { la = sc.CodeModule; break; } } if (la == null) { la = Utility.Assembly.AssemblyLoadFrom(codemodule); } if (la == null) { msg = string.Format("{0} could not be loaded", codemodule); } } sce = new SqlConfigEntry(provider, codemodule, cname, la, tselect, msg); dsDir.Add(provider, sce); } catch (Exception e) { // keep exception; if this DataProvided is ever useed we will see the message sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, e.Message); dsDir.Add(provider, sce); } sce.ReplaceParameters = replaceparameters; }