2010-06-03 4 views
0

У меня самая причудливая проблема (по крайней мере, это странно для меня) с SQL Server Express 2008.SQL Server 2008 Express одна строка написать

Проблема заключается в следующем:

На развитие машины I используйте SQL Server 2008 Enterprise .... Я получаю некоторые данные из службы WCF и записываю эти данные в базу данных (как бы это ни было) .... Следует отметить, однако, что запись выполняется в отдельном нить. Но, во всяком случае, никаких проблем во время разработки ... все данные есть.

Затем я установил все (строки подключения. \ SQLEXPRESS, другие настройки) в Release и скопируйте их на тестовую машину с установленной SQL Server Express (поскольку мое приложение является клиентским приложением, и оно должно работать с Express) ... Я запускаю программу .... программа извлекает данные из службы ... и когда я смотрю на базу данных ... У меня большой сюрприз ... есть только одна строка, написанная (первая строка, полученная от службы WCF).

Я бы очень признателен за любую помощь ... Я здесь в тупике.

+4

Никто не сможет помочь вам с информацией, которую вы указали. Вам нужно предоставить некоторый код и объяснить, что вы делаете более подробно. –

+0

код? я просто сказал, что записываю простые данные в базу данных .... нет необходимости в коде ... кроме того, что он не имеет ничего общего с кодом, а скорее с настройками на машинах. – TheBoyan

+1

Вы могли бы настроить SQL Server Express на своем компьютере-разработчике и попытаться сохранить данные в своих таблицах?Я не вижу, как SQL Server Enterprise и Express могут быть *, которые отличаются друг от друга, чтобы вести себя так. Если он работает на вашей машине DEV с SQL Server Express, вы узнаете, что версия базы данных не является проблемой в вашем случае .... –

ответ

1

Двойная проверка всех (особенно строк подключения). Попросите приложение вывести файл журнала, который может помочь отладить вашу проблему.

Проверьте основную БД, чтобы убедиться, что записи не были случайно записаны в базу данных разработки.

+0

Я должен, вероятно, дважды проверить строки подключения, это хороший момент. BTW, я регистрирую все (он не показывает никаких исключений вообще), просто сообщает, что это сделано, фактически ничего не делая. Может ли это быть проблемой между различными версиями SQL-сервера? – TheBoyan

+0

На самом деле, у меня есть только минимальный опыт работы с SQL-сервером. Я просто ответил на него как общий вопрос программирования. Не могли бы вы запросить базу данных сразу после вставки, чтобы подтвердить, что записи написаны вообще? Не просто регистрировать исключения. Для отладки также регистрируются значения любых релевантных переменных или выражений. – Steven

+0

У вас может не быть опыта, но вы даете мне идеи. О журнале ... Я делаю все это ... регистрирую каждый отдельный шаг, используя переменные и все, я также проверял, что данные есть ... на самом деле там (на машине разработки), но только один одна строка в таблице на тестовой машине (одна с использованием SQL express) – TheBoyan

1

Вы по какой-либо случайности набора (я знаю, что это маловероятно)

set ROWCOUNT 1 
+0

нет, я боюсь, что нет, я предполагаю, что это имеет какое-то отношение к строкам подключения или к различным версиям SQL-сервера. – TheBoyan

2

вы в состоянии профиль, что на самом деле вызывается на сервере SQL?

Откройте профилировщик сервера sql, укажите экземпляр sql express и убедитесь, что вы нажимаете RPC: Completed и Sql Statement Completed. Вы можете снять отметку с остальной части по умолчанию, это может рассказать вам, как ее возможно называть по-другому на сервере.

Другие мысли: Правилен ли тип команды?

Является ли верхний проскальзывание там каким-то образом?

+0

+1 SQL Profiler - это, безусловно, путь. –

0

Хорошо, кто-то найдет это интересное ...

После тщательного анализа это произошло:

Я переместил код, который записывает данные в базу данных, которая была запущена в другом потоке к тот же поток, что и GUI .... и без проблем он отлично работает ... он записывает все данные в базу данных.

Я смотрел дальше и придумал статью в Интернете, в которой говорится, что SQL Express имеет только один планировщик (и, конечно, один процессор и т. Д.) ... и, следовательно, он не поддерживает несколько потоков, записывающих в базу данных (кто-нибудь еще знает об этом?) ... поэтому решение для этого, вероятно, создает очередь и просто отправляет материал в нее по мере поступления и записи данных по одному в базу данных.

+0

Это звучит очень неправильно для меня на первый взгляд. SQL Express определенно поддерживает одновременных пользователей –

+0

Это звучит очень странно, я должен признать ... но я попробовал (используя несколько потоков для записи в db), и он не работал – TheBoyan

+0

Как работает ваш многопоточный подход? Является ли это чем-то другим или более экзотическим, чем то, что произойдет, если несколько разных пользователей будут одновременно обращаться к базе данных? Также я согласен с Zielyn в том, что вы должны использовать SQL Profiler (не поставляется с выражением, но вы должны иметь возможность профилировать из своей корпоративной версии) –

Смежные вопросы