检查记录是否已经存在于数据库中

时间:2019-10-01 17:35:17

标签: c# sql

我有一个程序,允许用户输入电影和有关该电影的详细信息,并将它们存储在数据库中。我将数据库显示在C#程序中,并且用户可以选择其中的一行,并将该行中的信息放入与之对应的文本框中,例如,“标题”将显示在标题文本框中,依此类推。我想做的就是阻止用户点击“提交”按钮,并将相同的记录放入数据库中。

任何帮助将不胜感激

提交按钮:

private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtTitle.Text) || string.IsNullOrWhiteSpace(txtRunTime.Text)) 
            {
                MessageBox.Show("Fill in all the required fields"); 
            }
            else 
            {

                if (lstStatus.SelectedIndex == 0) 
                {
                    Status = "Watched"; 
                }
                else 
                {
                    Status = "Not Watched"; 
                }

                if (lstType.SelectedIndex == 0) 
                {
                    Type = "Movie"; 
                }
                else 
                {
                    Type = "TV Show";
                } 

                con.Open(); 
                SqlCommand cmd = new SqlCommand("insert into dbo.Movies(Title, Genre, RunTime, Type, Status) values('"+txtTitle.Text+"','"+txtGenre.Text+"','"+txtRunTime.Text+"','"+Type+"','"+Status+"')", con); 
                cmd.ExecuteNonQuery(); 
                MessageBox.Show("Data transferred into the database!"); 
                con.Close(); 

                txtTitle.Text = ""; 
                txtRunTime.Text = ""; /
            } 
        } 

选择行时的代码:

private void DataGridMovies_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if(DataGridMovies.CurrentRow.Index == DataGridMovies.Rows.Count - 1)
            {
                MessageBox.Show("Empty row selected"); // Display a message to the user
            }
            else
            {
                ID = Convert.ToInt32(DataGridMovies.Rows[e.RowIndex].Cells[0].Value.ToString());
                txtTitle.Text = DataGridMovies.Rows[e.RowIndex].Cells[1].Value.ToString();
                txtGenre.Text = DataGridMovies.Rows[e.RowIndex].Cells[2].Value.ToString();
                txtRunTime.Text = DataGridMovies.Rows[e.RowIndex].Cells[3].Value.ToString();
                if (DataGridMovies.Rows[e.RowIndex].Cells[4].Value.ToString() == "Movie")
                {
                    lstType.SelectedIndex = 0;
                }
                else
                {
                    lstType.SelectedIndex = 1;
                }// End of IF ELSE Statement
                if (DataGridMovies.Rows[e.RowIndex].Cells[5].Value.ToString() == "Watched")
                {
                    lstStatus.SelectedIndex = 0;
                }
                else
                {
                    lstStatus.SelectedIndex = 1;
                }// End of IF ELSE Statement
            }//End of IF statement

1 个答案:

答案 0 :(得分:0)

您需要使用sql参数,否则您的sql数据库可能会被黑客入侵。

您可以在这里阅读有关内容: https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.parameters?view=netframework-4.8 cmd.Parameters.AddWith(名称,值)

确定记录是否存在。如果不是,则使用插入添加。如果不是,则改为更新记录。

根据您掌握的处理能力,您可能还会考虑自动完成。这可能掩盖了他们只是在更新您已经“找到”的记录的事实。 https://www.grapecity.com/blogs/dynamic-autocomplete-c1textbox

后端的元标记和算法有时会处理重复的条目。