Проблема с обновлением базы данных через DataAdapters / наборы данных в C # / Visual Studio - PullRequest
0 голосов
/ 07 августа 2010

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

    Code:

        //in my form load event
        con = new System.Data.SqlClient.SqlConnection();
        ds1 = new DataSet();
        ds2 = new DataSet();

        con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True";

        con.Open();
        MessageBox.Show("Database Open.");

        string sql = "SELECT * From tblPurchases";
        da = new System.Data.SqlClient.SqlDataAdapter(sql, con);

        string cust = "SELECT * From tblCustomers";
        da2 = new System.Data.SqlClient.SqlDataAdapter(cust, con);

        da.Fill(ds1, "Purchases");
        numOfRecords = ds1.Tables["Purchases"].Rows.Count;

        da2.Fill(ds2, "Customers");
        numOfCustomers = ds2.Tables["Customers"].Rows.Count;

        con.Close();
        MessageBox.Show("Database Closed.");

    Code:
            //in my submit button click event

            System.Data.SqlClient.SqlCommandBuilder cb;
            cb = new System.Data.SqlClient.SqlCommandBuilder(da);

            System.Data.SqlClient.SqlCommandBuilder cb2;
            cb2 = new System.Data.SqlClient.SqlCommandBuilder(da2);

            DataRow dRow = ds1.Tables["Purchases"].NewRow();
            DataRow dRow2 = ds2.Tables["Customers"].NewRow();

            //dRow updating happens here

            ds1.Tables["Purchases"].Rows.Add(dRow);
            ds2.Tables["Customers"].Rows.Add(dRow2);

            da.Update(ds1, "Purchases");
            da2.Update(ds2, "Customers");

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

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Все, что вам нужно сделать, это заменить

con.ConnectionString = 
`"Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;
Integrated Security=True;User Instance=True";

, который будет сгенерирован во время выполнения, на реальный, например, изменить |DataDirectory| на реальный путь.Пример: c:\\blablablabla.

0 голосов
/ 07 августа 2010

Метод SqlDataAdapter.Update() возвращает целое число с количеством успешно обновленных строк.Подумайте о загрузке этого значения в переменную, чтобы определить, были ли сообщены какие-либо строки как обновленные.

SqlCommandBuilder , вероятно, нуждается в вызове метода .GetUpdateCommand().GetUpdateCommand получает автоматически сгенерированный объект SqlCommand, необходимый для обновления базы данных .

cb.GetUpdateCommand();
cb2.GetUpdateCommand();

da.Update(ds1, "Purchases");
da2.Update(ds2, "Customers");

Рассмотрите возможность запуска SQL Server Profiler на вашем сервере, чтобы определить операторы TSQL, которые генерируютсяSqlCommand.Это будет чрезвычайно полезно при определении того, соответствуют ли база данных и операторы ожиданиям.

...