我使用了代码:
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值,如果有任何重复,它将显示错误。口是不正常的。但插入不正常工作。它将显示成功插入。但值没有做插入
答案 0 :(得分:3)
在覆盖com.ExecuteNonQuery()
变量之前,您实际上并未调用com
。
答案 1 :(得分:0)
您根本没有运行插入 - 您设置了命令,然后使用新的select命令覆盖它。
即使你在那个时候运行插入,你的选择也总是会因为你刚刚插入而返回true。另外,根据数据库结构,如果该数据库字段设置为唯一(这似乎是您试图在代码中强制执行的),那么我会期望在您尝试插入已存在的东西时抛出sql异常。
您要做的是运行select以检查它是否已经存在。如果存在,你可以停下来。如果它不存在,则可以进行插入。
或者更好的是仍然编写一个单独的SQL语句(更好的是一个过程),它在插入的同时进行检查,以试图防止与两个线程相关的任何可能的问题进行检查,并发现它不存在,那么两个执行插入的线程导致其中一个线程最有可能失败。