Редактирование и сохранение результатов из Microsoft Access на C#

#c# #database #winforms #ms-access #textbox

#c# #База данных #winforms #ms-access #текстовое поле

Вопрос:

Я работаю над своей собственной POS-системой и использую этот код, чтобы попытаться заставить приложение редактировать «количество» товара. Что я сделал, так это то, что у меня появилась панель поиска, где я могу выполнить поиск по идентификатору штрих-кода, и данные отобразятся в текстовом поле. (Т.е. Исходное количество будет отображаться в TextBox1. Я бы получил это текстовое поле.Текст «1» [Я не собираюсь вдаваться здесь в подробности, но это работает, пожалуйста, прокомментируйте, если вам действительно нужен код]). Теперь я хочу связать и отредактировать данные с базой данных Access и вставить результат из второго текстового поля (с исходным текстовым полем 1) Вот ошибка: Изображение ошибки

Вот код:

        using System.Data.OleDb;
       using System.Drawing.Printing;
       using System.IO;
       using System.Drawing.Imaging;

       namespace TestBarcode
                {
                        public partial class POS : Form
                {
          private OleDbConnection connection = new OleDbConnection();


    public POS()
    {
        InitializeComponent();
            connection.ConnectionString=@"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:POSDatabaseMainDatabase_POS.accdb;
        Persist Security Info=False;";
    }

        private void POS_Load(object sender, EventArgs e)
    {

          this.inventoryManagementTableAdapter.Fill(this.mainDatabase_POSDataSet.InventoryManagement);
        checkBox1.Show();
        checkBox2.Hide();
        try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string query = "select * from InventoryManagement";
            command.CommandText = query;

            OleDbDataAdapter da = new OleDbDataAdapter(command);
            DataTable dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;

            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error"   ex);
        }
     }


  try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;

   //EditTextHere

           string query = "UPDATE InventoryManagement set Số_Lượng_Trong_Kho='"   textBox25.Text   "',Mã_Số_Vạch='"   textBox19.Text   "',Mã_thợ='"   textBox13.Text   "',Kiểu='"   textBox14.Text   "',Size_Giày='"   textBox15.Text   "',Màu='"   textBox16.Text   "',Giá='"   textBox17.Text   "'where ID="   textBox24.Text   "";

command.CommandText = query;

            command.ExecuteNonQuery();
            MessageBox.Show(query);

            connection.Close();

        }

        catch (Exception ex)
        {
            MessageBox.Show("Error"   ex);
        }
  

PS: (1) Игнорируйте вьетнамский текст, вы можете заменить эти слова чем угодно, если хотите.

(2) Извините, я немного напортачил с текстовым полем, поэтому имя текстового поля является случайным и его очень трудно понять.

Есть ли способ добиться этого? Если да, пожалуйста, помогите. Спасибо.

Комментарии:

1. Когда вы заключаете переменную в одинарные кавычки, как вы делаете в команде Update, то это передается вашему движку database engine в виде строки. Если движок ожидает чего-то другого, он может попытаться преобразовать вашу «строку» в ожидаемое значение. Иногда это работает, иногда нет. Начните использовать параметры и точно укажите свои типы данных.

2. Будет ли это работать, если я выберу datarow, а затем укажу, какой это datarow, а затем отредактирую выбранный мной? Вот так: foreach (DataRow db в dt.Rows) { ,,,,,, } Будет ли это работать?

Ответ №1:

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