Как я могу сгенерировать программно "вставить в" файл сценария данных из таблицы базы данных? - PullRequest
0 голосов
/ 12 июля 2010

существует ли элегантный объектно-ориентированный фреймворк?

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

Вот код, который я написал для создания хранимых процедур «вставка» для каждой таблицы в базе данных.Он также обрабатывает возврат нового идентификатора для тех таблиц, которые имеют столбец идентификаторов.Он использует SQL SMO.Некоторые из них немного специфичны для моего проекта, поэтому, пожалуйста, дайте мне знать, если у вас есть вопросы.

0 голосов
/ 30 октября 2012

Я только что написал быстрый и грязный скрипт экспорта данных (на этот раз вы не можете получить доступ к БД через SSMS). В любом случае, это может помочь кому-то в будущем:

var result = new StringBuilder();
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)) {
    con.Open();
    using (var cmd = con.CreateCommand()) {
        cmd.CommandText = @"
DECLARE @name VARCHAR(255)
DECLARE iterator CURSOR FOR SELECT name FROM sys.tables WHERE type='U'

OPEN iterator
FETCH NEXT FROM iterator INTO @name
WHILE @@FETCH_STATUS = 0 BEGIN
    SELECT @name name
    EXEC ('SELECT * FROM ' + @name)
    FETCH NEXT FROM iterator INTO @name
END

CLOSE iterator
DEALLOCATE iterator
";
        using (var reader = cmd.ExecuteReader()) {
            do {
                // get table name
                reader.Read();
                string tableName = reader[0].ToString();

                // get contents
                reader.NextResult();
                result
                    .Append("SET IDENTITY_INSERT ")
                    .Append(tableName)
                    .Append(" ON\r\n");
                while (reader.Read()) {
                    result
                        .Append("INSERT ")
                        .Append(tableName)
                        .Append(" (");
                    for (var x = 0; x < reader.FieldCount; x++)
                        result
                            .Append(x == 0 ? string.Empty : ",")
                            .Append("[" + reader.GetName(x) + "]");
                    result
                        .Append(" ) VALUES (");
                    for (var x = 0; x < reader.FieldCount; x++)
                        result
                            .Append(x == 0 ? string.Empty : ",")
                            .Append("'" + reader[x].ToString() + "'");
                    result
                        .Append(")\r\n");
                }
                result
                    .Append("SET IDENTITY_INSERT ")
                    .Append(tableName)
                    .Append(" OFF\r\n");
            } while (reader.NextResult());
        }
    }
}

Response.Write(result);
0 голосов
/ 12 июля 2010

Звучит так, будто вы хотите ORM, или вы действительно хотите вставить текст вместо вставки?

Вы должны взглянуть на Linq To SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...