Вставки SQL Server Express больше не работают - PullRequest
0 голосов
/ 08 февраля 2012

В моем приложении на C # я делаю следующее:

using (SqlConnection connection = new SqlConnection(connectionstr))
{
    connection.Open();
    SqlCommand com1 = new SqlCommand("insert into Anfangstierbestand(bestand, jahr, loginid) VALUES (" + bestand + ", " + jahr + ", " + loginid + ");", connection);
    SqlCommand com2 = new SqlCommand("select * from Anfangstierbestand;", connection);

    com1.Connection = connection;
    int ferksum = 0;

    com1.ExecuteNonQuery();
    connection.Close();

    connection.Open();
    SqlDataReader read = com2.ExecuteReader();

    while (read.Read())
    {
        ferksum += Convert.ToInt32(read[2]);
    }

    // MessageBox.Show("Fehler beim Erstellen des Tierbestandes", "Fehler"); }
    MessageBox.Show(ferksum.ToString());
}

Это простая вставка в базу данных.Я добавил com2, чтобы проверить, работает ли вставка.

К сожалению, значение com2 говорит мне, что оно работает, но когда я иду в Обозреватель серверов и нажимаю Выполнить SQL, новых значений нет.

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

Кто-нибудь знает, в чем причина?

РЕДАКТИРОВАТЬ :

C #:

string connectionstr = "Data Source=.\\SQLEXPRESS;" + "AttachDbFilename=|DataDirectory|\\Datenbank\\FarmersCalc.mdf;" + "Integrated Security=True;" + "User Instance=true;";

РЕДАКТИРОВАТЬ2:

Обозреватель серверов:

Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\user\Desktop\Farmer´s Calc\Programmierung\WPF\Finanz_WPF\Finanz_WPF\Datenbank\FarmersCalc.mdf";Integrated Security=True;User Instance=True

РЕДАКТИРОВАТЬ3:

Вот столбцы:

id int,
jahr int,
anzahl int,
loginid int

EDIT4:

Возможно ли, что я открыл свой проект с помощью выражения blend?Обычно я работаю с VS 2010 ...

EDIT5:

Даже потому, что я не могу ответить на свой вопрос (<100 репутаций), я пишу его здесь: </p>

Позор мне.Некоторые из вас были правы, это был неправильный файл базы данных.Но мне все еще интересно, почему это произошло, потому что я ничего не изменил за несколько дней, а до этого это работало!

Спасибо всем за помощь!

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

Вы используете пользовательские экземпляры, почему?Возможно ли, что экземпляр, к которому вы подключаетесь в обозревателе серверов, не совпадает с экземпляром, в который ваше приложение вставляет данные?Что происходит, когда вы выбираете данные из приложения, отражают ли они ваши вставки?На основании ваших строк подключения мне кажется, что это два совершенно разных файла MDF - они имеют одинаковые имена, но находятся в разных местах.

1 голос
/ 08 февраля 2012

В качестве диагностики

 connection.Open();
 int n = com1.ExecuteNonQuery();
 // log or show 'n' , the nr of rows affected

Правка после просмотра строк подключения:

локальные файлы БД в |DataDirectory|\ очень подвержены перезаписи при следующем запуске илипостроить команду.

Убедитесь, что вы установили для них значение «никогда не копировать» или «копировать, если новее» в обозревателе решений VS.

1 голос
/ 08 февраля 2012

Возможно, где-то в стеке вызовов над этим кодом кто-то добавил TransactionScope.

Это приведет к тому, что соединения будут автоматически регистрироваться в транзакции, и соединения смогут видеть данные, вставленные через эту еще не подтвержденную транзакцию. Когда область выходит без вызова scope.Complete, транзакция откатывается и данные не сохраняются.

1 голос
/ 08 февраля 2012

Является ли проблема неявных транзакций ?Вам нужно выдать коммит SQL-вставки?Если com2 сообщает вам, что он есть, он может видеть его только в контексте текущей транзакции SQL.

Вы должны предоставить строку подключения как для обозревателя сервера, так и для SqlConnection ( connectionstr ).Убедитесь, что вы настроили соединение с вашим обозревателем сервера с помощью User Instance=true;.

...