C# 数据库插入在文本框之间不起作用

本文关键字:之间 不起作用 文本 数据库 插入 | 更新日期: 2024-10-31 05:16:04

我做了一个图书馆管理系统。放置4个框,其中包含标题,作者,页数和出版商。然后添加一个按钮将其添加到数据库中,我还有 3 个包含标题、作者和出版商的列表框。似乎当我完成填写 4 个文本框然后单击插入按钮时,它不会更新列表框甚至数据库。什么都没有发生。你是怎么做到的?

     OleDbCommand cmd = new OleDbCommand();
        OleDbConnection cn = new OleDbConnection();
        OleDbDataReader dr;
        public frm1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database2.accdb;Persist Security Info=True";
            cmd.Connection = cn;
            loaddata();
        }
        private void loaddata()
        {
            lstbxTitle.Items.Clear();
            lstbxAuthor.Items.Clear();
            lstbxPub.Items.Clear();
            try
            {
                string q = "SELECT * FROM Table2";
                cmd.CommandText = q;
                cn.Open();
                dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        lstbxTitle.Items.Add(dr[1].ToString());
                        lstbxAuthor.Items.Add(dr[2].ToString());
                        lstbxPub.Items.Add(dr[6].ToString());
                    }
                }
                dr.Close();
                cn.Close();
            }
            catch (Exception e)
            {
                cn.Close();
                MessageBox.Show(e.Message.ToString());
            }
        }

private void lstbxTitle_Click(object sender, EventArgs e)
        {
            ListBox l = sender as ListBox;
            try
            {
                if (l.SelectedIndex != 1)
                {
                    lstbxTitle.SelectedIndex = l.SelectedIndex;
                    lstbxAuthor.SelectedIndex = l.SelectedIndex;
                    lstbxAuthor.Text = lstbxAuthor.SelectedItem.ToString();
                    lstbxPub.SelectedIndex = l.SelectedIndex;
                    lstbxPub.Text = lstbxPub.SelectedItem.ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (txtbxAddT.Text != "")
            {
                string q = "insert into Table2 (Title) values ('" + txtbxAddT.Text.ToString() + "')";
                txtbxAddT.Text = null;
            }
            if (txtbxAddA.Text != "")
            {
                string q = "insert into Table2 (Author) values ('" + txtbxAddA.Text.ToString() + "')";
                txtbxAddA.Text = null;
            }
            if (txtbxAddNP.Text != "")
            {
                string q = "insert into Table2 (Page Number) values ('" + txtbxAddNP.Text.ToString() + "')";
                txtbxAddNP.Text = null;
            }
            if (txtbxAddP.Text != "")
            {
                string q = "insert into Table2 (Publisher) values ('" + txtbxAddP.Text.ToString() + "')";
                txtbxAddP.Text = null;
            }
            loaddata();
        }

C# 数据库插入在文本框之间不起作用

问题是您没有执行您的query.它在string q中,但你没有在任何地方执行它。

创建一个方法:

private void UpdateData(query)
{
    try 
    { 
        cn.Open(); 
        cmd.CommandText = query; //set query to execute 
        cmd.ExecuteNonQuery();  //executing the query
        cn.Close(); 
    } 
    catch (Exception ex)
    {
    }
}

在方法btnAdd_Click的每个if-statement中调用此方法:

if (txtbxAddT.Text != "")
{
    string q = "insert into Table2 (Title) values ('" + txtbxAddT.Text.ToString() + "')";
    UpdateData(q);
    txtbxAddT.Text = String.Empty; //Set it to "Empty", Null is not Empty
}
//... and so on for every if check

最佳实践建议:

textbox.Text分配给""null不是一个好的做法。

请改用String.Empty

在检查textbox.Text是否Empty时,切勿使用textbox.Text == nulltextbox.Text == "",这些也不是最佳实践,有时会产生问题。

请改用String.IsNullOrEmpty(textbox.Text)