0

我的问题很简单:我有一个列名为“姓氏”的 SQL 表,其中包含字段 lastname1、lastname2、lastname3 ......

在我的 c# 代码中,我有一个方法,仅当列 lastname 的字段不存在于表中时才在表中插入一行。输入中的这个方法有姓氏,所以对于我的 INSERT 是一个参数。

我如何比较并随后检查字段 lastname 是否已经在表中?

谢谢

4

3 回答 3

2

如果字段必须是唯一的,则应始终在表中使用唯一约束。这样一来,即使输入直接来自 SSMS 或其他应用程序,您也可以始终防止重复。

然后最简单的方法是处理根据其编号引发的 sql 异常。

....

try
{
    int inserted = cmd.ExecuteNonQuery();
} catch (SqlException ex)
{
    if (ex.Number == 2601)
    {
        // show meaningful error message
        MessageBox.Show("Cannot insert duplicate key row in object"); 
    }
    else
        throw;
}

....
于 2013-08-21T15:17:10.303 回答
0

有两种选择,一种是来自 sql 端,另一种是来自后面的代码。

不幸的是你不能改变你的 sql 代码我同意@David。

从后面的代码中你必须做这样的事情。

首先,您必须从表中选择所有数据并检查该数据。像这样的东西。

    SqlConnection con = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con; //Your connection string"
    cmd.CommandText = "Select * from table1"; // your query
    cmd.CommandType = CommandType.Text;
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    DataTable dt = new DataTable();
    dt = ds.Tables[0];
    int count=0;
    for (int i = 0; i > dt.Rows.Count; i++)
    {
        if (Convert.ToString(dt.Rows[i]["LastName"]) == Lastname)
        {
            count++;
        }
    }
    if (count > 0)
    {
        //insert code for data
    }
    else
    {
        var script = "alert('"+ Lastname + "already exist.');";
        ClientScript.RegisterStartupScript(typeof(Page), "Alert", script, true);
        // or you can use here your Update statement
    }

愿这对你有所帮助,你可以理解。

于 2013-08-23T04:05:30.257 回答
0

仅当值不在表中时,此 SQL 才会插入新记录:

INSERT INTO Your_Table ( LastName )
SELECT @NewLastName
WHERE NOT EXISTS( SELECT * FROM Your_Table WHERE LastName = @NewLastName )
于 2013-08-21T15:20:59.657 回答