我的问题很简单:我有一个列名为“姓氏”的 SQL 表,其中包含字段 lastname1、lastname2、lastname3 ......
在我的 c# 代码中,我有一个方法,仅当列 lastname 的字段不存在于表中时才在表中插入一行。输入中的这个方法有姓氏,所以对于我的 INSERT 是一个参数。
我如何比较并随后检查字段 lastname 是否已经在表中?
谢谢
我的问题很简单:我有一个列名为“姓氏”的 SQL 表,其中包含字段 lastname1、lastname2、lastname3 ......
在我的 c# 代码中,我有一个方法,仅当列 lastname 的字段不存在于表中时才在表中插入一行。输入中的这个方法有姓氏,所以对于我的 INSERT 是一个参数。
我如何比较并随后检查字段 lastname 是否已经在表中?
谢谢
如果字段必须是唯一的,则应始终在表中使用唯一约束。这样一来,即使输入直接来自 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;
}
....
有两种选择,一种是来自 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
}
愿这对你有所帮助,你可以理解。
仅当值不在表中时,此 SQL 才会插入新记录:
INSERT INTO Your_Table ( LastName )
SELECT @NewLastName
WHERE NOT EXISTS( SELECT * FROM Your_Table WHERE LastName = @NewLastName )