2014-01-22 26 views
-1

我在Web窗体中有三个文本框,它是用户必须输入以注册的用户名,密码和IC编号。如果输入的人员的IC号码与数据库中任何记录的IC值相匹配,则会将该人员输入的用户名和密码更新为具有匹配IC的该记录的用户名字段和密码字段。如果人员输入的IC不匹配数据库中任何记录的IC,则不会更新任何现有记录,并且它会说IC不存在于标签中。目前lblErrorMessage.Text =“IC不存在”;在catch例外中不起作用。如果输入的IC不存在于数据库中,它只会重定向到已注册,即使是tho。任何帮助?如果数据库中已存在值,如何进行错误验证?

+0

你不这样做,你使用UPDATE。其他一切都是关于你所期望的。 – evanmcdonnal

回答

1

您需要UPDATE而不是INSERTINSERT用于插入新记录。您目前正在做的是更新现有记录,而不是插入它。

像:

using(SqlCommand cmd = new SqlCommand()) 
{ 
    Guid guid = Guid.NewGuid(); 
    string sql = @"UPDATE patient 
        SET 
        pUserName = @pUserName, 
        pPassword = @pPassword 
        WHERE pIC = @pIC"; 

    cmd.Parameters.AddWithValue("@pIC", txtIC.Value); 
    cmd.Parameters.AddWithValue("@pUsername", txtUsername.Value); 
    cmd.Parameters.AddWithValue("@pPassword", txtPassword.Value); 

    cmd.Connection = con; 
    cmd.CommandText = sql; 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    //rest of the code 

} 
+1

@Jordjmax你不能使用单个查询来更新或插入。检查项目是否存在,然后使用适当的查询 –

+0

谢谢,如果我在数据库中存在的文本框中输入一个nric号码,它会起作用。但是,如果我输入的数据库中不存在的IC,它仍然会返回到Response.Redirect(“registered.aspx”);但没有任何内容插入到数据库中,所以它很好。我希望它显示这个lblErrorMessage.Text =“IC不存在”;如果输入的IC在数据库中不存在,则不会重定向到registered.aspx。看起来它没有工作@Habib – Pony

+0

@Jjjjmax,正如Sergey已经解释的那样,你需要两个不同的查询,你可以是INSERT或UPDATE表。你可以查询数据库,看看你是否已经有了一个违反你的ID的记录,或者你可以编写一个程序来做'UPSERT'看看[this](http://stackoverflow.com/questions/18873747/fast-upsert-sql -server-2008-r2) – Habib

0
UPDATE table_name 
SET column1 = value1, column2 = value2,... 
WHERE some_column = some_value; 

要 “插入” 到现有的记录。你需要更新它。代替Insert

+0

如何验证IC的错误? @Noran – Pony

0

我不熟悉C#,但你应该做这样的事情:

首先,检查用户输入数据库;

("SELECT * FROM patient WHERE pIC = 'picinputVar'"); 

然后,检查if语句是否返回任何值。如果它没有打印按摩说pIC不存在。

,如果它确实使用了更新,而不是INSERT

("UPDATE patient SET pUsername='usernameinput', pPassword='passwordinput' WHERE pIC='picinputVar'"); 
+0

谢谢,我在标签上留下了pIC不存在的错误消息。我在catch异常处的代码不起作用。如何写if语句?也抓到异常呢? @VeilSide – Pony

相关问题