防止在数据库中重复输入

时间:2013-11-02 20:02:52

标签: c# database sql-server-express

     private void Save_Click(object sender, EventArgs e)
    {
        string strconn = @"Server=.\SQLEXPRESS;initial catalog=PharmacyV2;integrated   security=true;";
        SqlConnection conn = new SqlConnection(strconn);
        //SqlCommand cmd = new SqlCommand();
         DataSet ds = new DataSet();
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter("select * from Units",conn);
        da.Fill(ds, "Units");
        bool found = false;
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {

            for (int j = 0; j < ds.Tables["Units"].Rows.Count; j++)
            {


                if (ds.Tables["Units"].Rows[j][0].ToString() == dataGridView1.Rows[i].Cells[0].Value.ToString())
                {
                    found = true;
                    break;
                }

            }

            if (found==false)
            {

                SqlCommand cmd;
                cmd = new SqlCommand("insert into Units (Unit_name) values (@name)", conn);
                cmd.Parameters.AddWithValue("@name", dataGridView1.Rows[i].Cells[0].Value.ToString());
                cmd.ExecuteNonQuery();
                MessageBox.Show("تمت الاضافه");


            }
        }
        conn.Close();

    }

我的程序将datagridview中的每个元素与来自数据库的Uint表中的每个元素进行比较,以防止数据库中的重复 if datagridvoew中的元素与数据库中uint表中的元素不相似  实现插入语句 为什么程序没有向数据库插入任何数据? (不实现insert语句)

2 个答案:

答案 0 :(得分:0)

在第一个for循环中将找到的变量初始化为false:

<强> found = false;

这样它就会被设置为每次迭代的初始状态。否则,如果一旦设置为true,则总是变为true。这就是为什么yor insert语句没有被执行。

所以你的for循环应该是这样的:

    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        found = false;

        for (int j = 0; j < ds.Tables["Units"].Rows.Count; j++)
        {


            if (ds.Tables["Units"].Rows[j][0].ToString() == dataGridView1.Rows[i].Cells[0].Value.ToString())
            {
                found = true;
                break;
            }

        }

        if (found==false)
        {

            SqlCommand cmd;
            cmd = new SqlCommand("insert into Units (Unit_name) values (@name)", conn);
            cmd.Parameters.AddWithValue("@name", dataGridView1.Rows[i].Cells[0].Value.ToString());
            cmd.ExecuteNonQuery();
            MessageBox.Show("تمت الاضافه");


        }
    }

答案 1 :(得分:0)

您如何要求数据库检查条目是否存在?

var unitName = dataGridView1.Rows[i].Cells[0].Value.ToString();
var command = new SqlCommand("SELECT COUNT(*) FROM Units WHERE Unit_name = @name", connection);
command.Parameters.AddWithValue("@name", unitName);

int result = (int)command.ExectureScalar();

if(result == 0) // no entry
{
     //Insert.
}