Обновить базу данных программно? - PullRequest
0 голосов
/ 14 июня 2011

В моей программе WPF есть локальная база данных Microsoft SQL Server Compact 3.5 (.sdf).

В моей таблице данных я вижу "старые" данные.Только если я нажму кнопку Обновить в обозревателе баз данных в Visual Studio 2010, я увижу новые вставленные данные.

Как программно обновить соединение с базой данных?

Чтобы очистить:

При загрузке моей программы я помещаю данные в базу данных с помощью SQL-запроса, например INSERT INTO clients VALUE (2, Peter, Smith) Затем я вызываю een tableAdapter.Fill(dataset.clients) и this.DataContext = dataset.clients.DefaultView;

Я ожидаю, что dataTable в dataSet будетбыть заполнены данными, которые я вставил секунду назад в базу данных.И после этого данные отображаются в dataGrid.Но этого не происходит.Вставленные данные отображаются только в том случае, если я прекращаю отладку и нажимаю (во время разработки) кнопку обновления в Database Explorer, а затем снова отлаживаю ...

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Если вы пытаетесь выполнить привязку из своей базы данных SQL CE, рассмотрите возможность реализации кода, который использует привязку данных. Это гарантирует, что ваши данные всегда будут «свежими» в вашей сетке. Вот пример кода для привязки данных в WPF .

SqlConnection con = new SqlConnection();
SqlDataAdapter ad = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand();
String str = "SELECT EmployeeID, FirstName, LastName, BirthDate, City, Country FROM Employees";
cmd.CommandText = str;
ad.SelectCommand = cmd;
con.ConnectionString = "Data Source=MyData.sdf;Persist Security Info=False";
cmd.Connection = con;
DataSet ds = new DataSet();
ad.Fill(ds);
ListViewEmployeeDetails.DataContext = ds.Tables[0].DefaultView;
con.Close();

....

<Grid x:Name="Grid1">
  <ListView Name="ListViewEmployeeDetails" Margin="4,20,40,100" ItemTemplate="{DynamicResource EmployeeTemplate}" ItemsSource="{Binding Path=Table}">
    <ListView.View>         
      <GridView>
        <GridViewColumn Header="Employee ID" DisplayMemberBinding="{Binding Path=EmployeeID}"/>
        <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=FirstName}"/>
        <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding Path=LastName}"/>
        <GridViewColumn Header="BirthDate" DisplayMemberBinding="{Binding Path=BirthDate}"/>
        <GridViewColumn Header="City" DisplayMemberBinding="{Binding Path=City}"/>
        <GridViewColumn Header="Country" DisplayMemberBinding="{Binding Path=Country}"/>
      </GridView>
    </ListView.View>
  </ListView>
</Grid>

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

Если нет, то ваши заявления относительно Database Explorer и всего остального во время выполнения не имеют смысла. Ваша сетка должна быть повторно заполнена / привязана к событию, которое имеет смысл (загрузка формы, нажатие кнопки пользователем, вставка строки пользователем). Пользователь не знает / не должен знать о Database Explorer. Правильный способ отображения в вашей сетке последних данных: myGrid.DataBind();

Если это так, могу ли я предположить, что это не должно / не имеет значения, поскольку данные, показанные на сетке, просто предназначены для заполнения. Если вы действительно хотели видеть свежие данные, то единственный вариант, который вы предлагаете: «обновить» через Database Explorer.

Очень неясно, что вы видите или ожидаете. Предложите отредактировать свой вопрос с помощью своего кода и нескольких скриншотов для иллюстрации.

0 голосов
/ 14 июня 2011

Ваша DataGrid не будет обновляться, если вы вставите некоторые данные через T-SQL. Вы должны вызвать DataBind в вашей сетке, например:

DataGrid1.DataBind(); //if you want the data to be refreshed.

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

DataGrid1.DataBind(); //and you should see your data refreshed.

Переименуйте DataGrid1 на то, что вы называете своим элементом управления DataGrid.

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