我们如何在同一个点击事件中使用两个查询?

时间:2011-09-19 16:03:09

标签: c# asp.net

我使用了代码:

protected void Button1_Click(object sender, EventArgs e)
{
    DataSet ds = new DataSet();
    SqlConnection con = new SqlConnection("server=kiran-b946c0f6d;
                                           uid=sa;
                                           pwd=123;
                                           database=employe");

    SqlCommand com=new SqlCommand("INSERT INTO Emplo VALUES('"+TextBox2.Text+"'",con);
    com.Parameters.Add("Email_ID", SqlDbType.VarChar);
    com.Parameters["Email_ID"].Value = TextBox2.Text;
    con.Open();

    Label3.Text = "successfully added";
    SqlDataReader reader = null;
    com = new SqlCommand("SELECT Email_ID FROM Emplo WHERE Email_ID='" 
                         + TextBox2.Text + "'", 
                         con);

    reader = com.ExecuteReader();
    if (reader != null && reader.HasRows)
    {
        Label3.Text = "Emailid alraedy exist";
    }

    reader.Dispose();

    SqlDataAdapter da = new SqlDataAdapter(com);
    da.Fill(ds);

    GridView1.DataSource = ds;
    GridView1.DataBind();
    con.Close();
}

我打算在数据库中使用Insert值,如果有任何重复,它将显示错误。口是不正常的。但插入不正常工作。它将显示成功插入。但值没有做插入

2 个答案:

答案 0 :(得分:3)

在覆盖com.ExecuteNonQuery()变量之前,您实际上并未调用com

答案 1 :(得分:0)

您根本没有运行插入 - 您设置了命令,然后使用新的select命令覆盖它。

即使你在那个时候运行插入,你的选择也总是会因为你刚刚插入而返回true。另外,根据数据库结构,如果该数据库字段设置为唯一(这似乎是您试图在代码中强制执行的),那么我会期望在您尝试插入已存在的东西时抛出sql异常。

您要做的是运行select以检查它是否已经存在。如果存在,你可以停下来。如果它不存在,则可以进行插入。

或者更好的是仍然编写一个单独的SQL语句(更好的是一个过程),它在插入的同时进行检查,以试图防止与两个线程相关的任何可能的问题进行检查,并发现它不存在,那么两个执行插入的线程导致其中一个线程最有可能失败。