C#如何防止数据库中的重复数据?

时间:2013-11-09 14:57:15

标签: c#

当用户输入重复数据时,如何防止“课程标题”在数据库中重复?

   SqlConnection cnn = new SqlConnection();
   SqlCommand cmd = new SqlCommand();
   SqlDataAdapter da = new SqlDataAdapter();
   SqlCommandBuilder cb = new SqlCommandBuilder(da);
   DataSet ds = new DataSet();
    cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Project1ConnectionString"].ConnectionString;
    cnn.Open();

    cmd.CommandText = "select * from  Lesson";
    cmd.Connection = cnn;

    da.SelectCommand = cmd;

    da.Fill(ds, "Lesson");


    DataRow drow = ds.Tables["Lesson"].NewRow();

    drow["TopicID"] = DropDownList1.Text;
    drow["LessonTitle"] = TextBox1.Text;
    drow["LessonDate"] = DateTime.Now;
    ds.Tables["Lesson"].Rows.Add(drow);
    da.Update(ds, "Lesson");

2 个答案:

答案 0 :(得分:4)

这种独特性应该由数据库强制执行。为表添加唯一约束:

CREATE UNIQUE INDEX UK_Lesson_Title ON Lesson (Title)

答案 1 :(得分:1)

您可以创建一个功能来检查重复的LessonTitle

解释:我在这里创建了一个名为checkDuplicateTitle()的函数。

此函数将LessonTable的AllRows作为DataRowCollection并将LessonTitle作为输入进行验证。

它会检查每一行的LessonTitle。 如果给定LessonTitle与表中的现有标题匹配,则此函数返回true,否则返回false。

如果返回的值为true,我们将忽略使用新行更新表,因为LessonTitle已经存在,否则我们将添加它。

代码如下:

void UpdateLessonTable()
{
     SqlConnection cnn = new SqlConnection();
       SqlCommand cmd = new SqlCommand();
       SqlDataAdapter da = new SqlDataAdapter();
       SqlCommandBuilder cb = new SqlCommandBuilder(da);
       DataSet ds = new DataSet();
        cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Project1ConnectionString"].ConnectionString;
        cnn.Open();

        cmd.CommandText = "select * from  Lesson";
        cmd.Connection = cnn;

        da.SelectCommand = cmd;

        da.Fill(ds, "Lesson");

     if (!checkDuplicateTitle(ds.Tables["Lesson"].Rows, textBox1.Text.ToString()))
        {
        DataRow drow = ds.Tables["Lesson"].NewRow();

        drow["TopicID"] = DropDownList1.Text;
        drow["LessonTitle"] = TextBox1.Text;
        drow["LessonDate"] = DateTime.Now;
        ds.Tables["Lesson"].Rows.Add(drow);
        da.Update(ds, "Lesson");
        }
       else
        {
         //you can display some warning here
         // MessageBox.Show("Duplicate Lesson Title!");
        }
}

//function for checking duplicate LessonTitle

bool checkDuplicateTitle(DataRowCollection rowTitle,String newTitle)
        {
            foreach (DataRow row in rowTitle)
            {
               if(row["LessonTitle"].Equals(newTitle))
                return true;
            }
            return false;
        }