Как обновить базу данных Access из GridView в Visual Studio?
Я пытаюсь обновить базу данных доступа при использовании Grid View в Visual Studio 2010, но безуспешно. Позвольте мне попытаться объяснить, что у меня есть.
У меня есть база данных доступа с таблицей "tblConfirmedworkhours", в которой есть поля "dateworked" и "подтвердил". Я могу отобразить отфильтрованную таблицу на своей веб-странице со ссылками редактирования / обновления, но таблица не будет обновляться.
Вариант 1: я бы хотел (если это возможно) не нажимать на кнопки редактирования и обновления, просто отредактировать данные на экране (я думаю о чем-то похожем на непрерывную форму MS Access, а затем нажмите какую-нибудь кнопку сохранения (которая (если возможно, снова) запустит запрос на добавление, уже созданный и сохраненный в моей базе данных доступа "qryToHistory").
Вариант 2: используйте кнопки редактирования / обновления, чтобы изменить данные в таблице.
Вот мой текущий код:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="AccessDataSource1" Width="983px"
AutoGenerateDeleteButton="True" AutoGenerateEditButton="True">
<Columns>
<asp:BoundField DataField="WorkHourID" Visible="false"
HeaderText="Timesheet ID" />
<asp:BoundField DataField="EmpName" HeaderText="Employee"
SortExpression="EmpName" />
<asp:BoundField DataField="dateworked"
HeaderText="Date" SortExpression="dateworked" ApplyFormatInEditMode="True">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:CheckBoxField DataField="confirmed" HeaderText="Confirmed"
SortExpression="confirmed" Text="This is OK">
<ItemStyle HorizontalAlign="Center" />
</asp:CheckBoxField>
</Columns>
<EditRowStyle Width="500px" Wrap="True" />
<EmptyDataRowStyle Width="5000px" />
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="~/PayrollDirect.accdb"
SelectCommand="SELECT [WorkHourID], [EmpName], [dateworked], [confirmed] FROM [tblConfirmedworkhours] WHERE (([CompanyID] = ?) AND ([confirmed] = ?)) ORDER BY [dateworked]"
UpdateCommand="UPDATE tblConfirmedworkhours SET dateworked=dateworked, confirmed=confirmed where WorkHourID=WorkHourID">
<SelectParameters>
<asp:SessionParameter DefaultValue="0" Name="CompanyID" SessionField="UserID" Type="Int32" />
<asp:Parameter DefaultValue="false" Name="confirmed" Type="Boolean" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="dateworked"/>
<asp:Parameter Name="confirmed"/>
</UpdateParameters>
</asp:AccessDataSource>
Возможен ли вариант 1, если да, то как.
Если вариант 1 невозможен, как я могу решить проблему обновления моей таблицы, как в варианте 2.
Я все еще изучаю Visual Studio, поэтому я благодарен за любую помощь.
2 ответа
У меня тоже было много проблем с этим, и я обнаружил что-то, чего не было в этих сообщениях: главная причина для меня в том, что у меня был последний обновленный столбец datetime, который является обязательным и для которого в базе данных установлено значение по умолчанию, Я предполагал, что база данных будет обрабатывать свое обновление для меня, поэтому я использовал его как скрытый столбец в GridView.
После нескольких часов разочарования я начал все заново и проверил каждый шаг своих действий. Затем я обнаружил, что скрытие обязательного поля - это все, что вызывает эту проблему! Вы также можете заметить, что формат даты может быть отключен, в зависимости от ваших настроек, поэтому вам также потребуется предоставить его в правильном формате, если это необходимо.
Кстати, это не уникальная вещь доступа; это случается даже с Ms SQL сервером, и я думаю, что это произойдет и с другими базами данных.
Я думаю, что это также является причиной того, что несколько вопросов об этом отчете "иногда он работает, иногда нет" или "он работает для одной таблицы, а не для другой".
Если вы не хотите, чтобы пользователь изменял значения некоторых ваших столбцов, установите для них шаблоны и измените их свойства редактирования / добавления только для чтения.
Есть и другие способы справиться с этим, например, предоставить его значение в коде, когда он скрыт.
Я не вижу команду обновления в вашем источнике данных. Вы пытаетесь обновить его через страницу aspx, или у вас есть код за страницей?
Попробуйте добавить команду UpdateCommand в asp:accessDataSource. Я подозреваю, что в настоящее время вы просите обновить таблицу, если вы еще не сказали, что а) она разрешена и б) как она должна обновляться
После редактирования
это от макушки моей головы. Но попробуйте добавить что-то вроде следующего. (Похоже на select)
UpdateCommand="UPDATE tblConfirmedworkhours SET dateWorked=@dateWorked, confirmed =@confirmed where EmpName=@empName">
<UpdateParameters>
<asp:Parameter Name="dateWorked" />
<asp:Parameter Name="confirmed" />
</UpdateParameters>
У меня нет VS на этом ПК, поэтому я не могу дать точный ответ на данный момент извините. Тем не менее, я думаю, что вам может понадобиться указать номер сотрудника в ваших запросах, поскольку у вас может быть 2 сотрудника с одинаковыми именами, и вам нужна уникальная ссылка, чтобы различать их.