예제 #1
0
        private static ConvertedQuery ConvertToMSSqlSyntax(ISqlFunctionInfo queryInfo, IDictionary <string, object> parameterNames)
        {
            ConvertedQuery convertedQuery = new ConvertedQuery();

            StringBuilder builder = new StringBuilder();

            foreach (string name in parameterNames.Keys)
            {
                builder.Append(name);
                builder.Append("|");
            }
            builder.Remove(builder.Length - 1, 1);
            string regExp = builder.ToString();

            MatchCollection collection = new Regex(regExp).Matches(queryInfo.Command);

            IDictionary <string, object> oleDbParams = new Dictionary <string, object>();
            int i = 1;

            foreach (Match match in collection)
            {
                oleDbParams.Add("@sp" + i, parameterNames[match.Value.Trim()]);
                i++;
            }

            convertedQuery.Parameters = oleDbParams;
            convertedQuery.Query      = queryInfo.Command;

            foreach (string name in parameterNames.Keys)
            {
                convertedQuery.Query = convertedQuery.Query.Replace(name, "?");
            }

            return(convertedQuery);
        }
예제 #2
0
        private string RunOleDbSequel(string connectionString, IDictionary <string, object> parameters)
        {
            string query = _functionInfo.Command;
            IDictionary <string, object> queryParameters = parameters;

            if (ShouldConvert(_functionInfo, parameters))
            {
                ConvertedQuery convertedQuery = ConvertToMSSqlSyntax(_functionInfo, parameters);
                query           = convertedQuery.Query;
                queryParameters = convertedQuery.Parameters;
            }


            DataSet dataSet = null;
            string  result  = string.Empty;

            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                using (OleDbCommand command = new OleDbCommand(query, connection))
                {
                    if (_functionInfo.IsStoredProcedure)
                    {
                        command.CommandType = CommandType.StoredProcedure;
                    }
                    else
                    {
                        command.CommandType = CommandType.Text;
                    }
                    foreach (KeyValuePair <string, object> parm in queryParameters)
                    {
                        command.Parameters.Add(new OleDbParameter(parm.Key, parm.Value));
                    }

                    connection.Open();
                    if (_functionInfo.IsQuery)
                    {
                        dataSet = new DataSet();
                        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
                        {
                            adapter.SelectCommand = command;
                            adapter.Fill(dataSet);
                            if (dataSet != null && !dataSet.HasChanges())
                            {
                                StringWriter writer = new StringWriter();
                                dataSet.WriteXml(writer);
                                result = writer.ToString();
                            }
                        }
                    }
                    else
                    {
                        command.ExecuteNonQuery();
                    }
                }
            }
            return(result);
        }
예제 #3
0
        private static ConvertedQuery ConvertToMSSqlSyntax(ISqlFunctionInfo queryInfo, IDictionary<string, object> parameterNames)
        {
            ConvertedQuery convertedQuery = new ConvertedQuery();

            StringBuilder builder = new StringBuilder();
            foreach (string name in parameterNames.Keys)
            {
                builder.Append(name);
                builder.Append("|");
            }
            builder.Remove(builder.Length - 1, 1);
            string regExp = builder.ToString();

            MatchCollection collection = new Regex(regExp).Matches(queryInfo.Command);

            IDictionary<string, object> oleDbParams = new Dictionary<string, object>();
            int i = 1;
            foreach (Match match in collection)
            {
                oleDbParams.Add("@sp" + i, parameterNames[match.Value.Trim()]);
                i++;
            }

            convertedQuery.Parameters = oleDbParams;
            convertedQuery.Query = queryInfo.Command;

            foreach (string name in parameterNames.Keys)
            {
                convertedQuery.Query = convertedQuery.Query.Replace(name, "?");
            }

            return convertedQuery;
        }