private (string, List <DbCommandParameter.DbCommandParameter>, IList <ParseError>) CreateInsertStatement(string tableName, DataTable records, ICollection <DbCommandParameter.DbCommandParameter> parameter = null)
        {
            var statement = CreateStatement(tableName);

            statement = AddColumnReferenceExpression(statement, records);
            statement.InsertSpecification.InsertOption = InsertOption.Into;

            var listParams   = new List <DbCommandParameter.DbCommandParameter>(parameter ?? new DbCommandParameter.DbCommandParameter[] { });
            var numberParams = 0;

            statement.InsertSpecification.InsertSource = new ValuesInsertSource();

            IList <ParseError> parseErrors;

            foreach (DataRow row in records.Rows)
            {
                var rv = new RowValue();
                foreach (DataColumn column in records.Columns)
                {
                    var cell = row[column];
                    if (cell is string name)
                    {
                        var exp = new TSql100Parser(false).ParseExpression(
                            new System.IO.StringReader(name), out parseErrors);
                        if (exp.GetType() == typeof(VariableReference) || exp.GetType() == typeof(GlobalVariableExpression))
                        {
                            rv.ColumnValues.Add(new VariableReference()
                            {
                                Name = name
                            });
                            continue;
                        }
                    }

                    while (listParams.Any(_ => _.Name == $"p{numberParams}"))
                    {
                        numberParams++;
                    }

                    rv.ColumnValues.Add(new VariableReference()
                    {
                        Name = $"@p{numberParams}"
                    });
                    listParams.Add(
                        new DbCommandParameter.DbCommandParameter(
                            $"p{numberParams}",
                            DbType.Object,
                            cell));
                    numberParams++;
                }

                ((ValuesInsertSource)statement.InsertSpecification.InsertSource).RowValues.Add(rv);
            }

            var generator = new Sql100ScriptGenerator();

            generator.GenerateScript(statement, out var query, out parseErrors);

            return(query, listParams, parseErrors);
        }
Esempio n. 2
0
        public static string GetText(this TSqlFragment fragment)
        {
            string script;

            _scriptGenerator.GenerateScript(fragment, out script);
            script = script.Replace(_dynamicPlaceholder, "?");
            script = script.Replace(";", string.Empty);
            return(script.Trim());
        }
Esempio n. 3
0
 private void Generate(Sql100ScriptGenerator scripter, bool quotedIdentifier, String inputScript)
 {
     SQLParser parser = new SQLParser(SqlVersion.Sql100, quotedIdentifier, inputScript);
     scripter.GenerateScript(parser.Fragment, out script);
 }
Esempio n. 4
0
        private void Generate(Sql100ScriptGenerator scripter, bool quotedIdentifier, String inputScript)
        {
            SQLParser parser = new SQLParser(SqlVersion.Sql100, quotedIdentifier, inputScript);

            scripter.GenerateScript(parser.Fragment, out script);
        }