C#/SQL - Что случилось с SqlDbType.Xml в процедурах?

Совместное использование файлов на целых узлах / машинах - это не то, что Docker решит для вас напрямую, но вы можете взглянуть на драйверы хранилища Docker в контексте общих систем хранения . Это помогает интегрироваться с такими решениями, как NFS, ZFS и т. Д.

Однако вы упомянули, что вы используете SQLite и Flask, используя драйвер SQLAlchemy. Чтобы избавить вас от головной боли, вместо того, чтобы пытаться разделить файловую систему между вашими тремя узлами, вы должны использовать сервер базы данных, такой как MySQL , MariaDB или PostgreSQL [114 ] (чтобы назвать несколько), все это хорошо работает с SQLAlchemy. Таким образом, вместо того, чтобы пытаться использовать один и тот же файл SQLite для всех запущенных экземпляров вашего приложения Flask (которое будет блокировать / ухудшать очень часто / быстро), вы можете подключить все свои контейнеры Flask к одному и тому же контейнеру базы данных.

Эту дополнительную базу данных можно легко запустить в контейнере, а также управлять с помощью docker-compose. Таким образом, только один узел нуждается в доступе к файловой системе для хранения данных для базы данных.

5
задан Rowland Shaw 12 September 2013 в 12:36
поделиться

2 ответа

Это действительно работает. Необходимо будет настроить Значение как SqlXml и не строка, но это может быть сделано. Вообразите эту таблицу:

CREATE TABLE XmlTest
(
    [XmlTestId] [int]   identity(1,1) primary key,
    [XmlText]   [xml]   NOT NULL
)

И sproc:

CREATE PROCEDURE XmlTest_Insert
(
    @XmlText    xml
)
AS

INSERT INTO XmlTest (XmlText)
VALUES (@XmlText)

Теперь изобразите консольное приложение, которое похоже на это:

using System.Data.SqlClient;
using System.Data;
using System.Data.SqlTypes;
using System.Xml;

namespace TestConsole
{
    class Program
    {

        static void Main(string[] args)
        {
            string xmlDoc = "<root><el1>Nothing</el1></root>";
            string connString = "server=(local);database=IntroDB;UID=sa;PWD=pwd";
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand("XmlTest_Insert", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter param = new SqlParameter("@XmlText", SqlDbType.Xml);
            param.Value = new SqlXml(new XmlTextReader(xmlDoc
                           , XmlNodeType.Document, null));
            cmd.Parameters.Add(param);

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Dispose();
        }
    }
}

Бинго!

Это было сделано в Visual Studio 2008 (.NET 3.5), но я абсолютно уверен, что она должна работать в Visual Studio 2005 (2.0 Платформы), также.

14
ответ дан 13 December 2019 в 05:43
поделиться

Вместо того, чтобы использовать Добавить Метод, попытайтесь использовать AddWithValue, где Вы не должны указывать тип просто имя и значение. Если Вы не используете другое направление для ввода?

0
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: