我的问题很简单: 我有一个SQL表列名“姓氏”与领域lastname1,lastname2,lastname3 ...如何检查表中的字段是否已经存在?
在我的C#代码,我有一个在表中插入的方法仅当列名字段不存在于表中时才行。此输入中的方法具有姓氏,因此对于我的INSERT是一个参数。
我该如何比较和推断检查字段姓氏是否已经在表格中?
感谢
我的问题很简单: 我有一个SQL表列名“姓氏”与领域lastname1,lastname2,lastname3 ...如何检查表中的字段是否已经存在?
在我的C#代码,我有一个在表中插入的方法仅当列名字段不存在于表中时才行。此输入中的方法具有姓氏,因此对于我的INSERT是一个参数。
我该如何比较和推断检查字段姓氏是否已经在表格中?
感谢
你应该总是使用unique constraints表中的一个字段必须是唯一的。这样,即使输入是直接来自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;
}
....
对约束部分达成一致,但检查是否存在某种东西几乎总是比盲目地拍摄并处理异常要好。 – banging
@banging:取决于它有多可能。检查可能有隐式竞争条件。 –
你是对的,但也许我没有清楚地解释我的问题。我想插入行如果不存在,但如果存在,但我有可能更新该行。在我的代码中,我写了一个简单的方法(称为RecordExist),如果该字段在表中,则返回true,否则返回false。所以我有两种不同的情况来管理。 – OmnipresentPerception
这个SQL将插入仅当这个值是不是已经在表中的一个新的记录:
INSERT INTO Your_Table (LastName)
SELECT @NewLastName
WHERE NOT EXISTS(SELECT * FROM Your_Table WHERE LastName = @NewLastName)
不幸在我的c#代码我有一个INSERT语句,我无法修改...对于我的目标,方式是通过代码,而不是通过TSQL。我正在考虑用我的方法的输入参数和表中记录的值作为参考,但我无法做到这一点。 – OmnipresentPerception
有两个选项,一个是从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
}
这可以帮助你,你可以理解。
如果该值已经存在,您想要做什么?姓氏似乎是“独特”字段的一个奇怪选择。 –