我的问题非常简单: 我有一个SQL表,列名为'lastname',字段为lastname1,lastname2,lastname3 ......
在我的c#代码中,我有一个方法只有在表中没有列lastname的字段时才在表中插入一行。输入中的此方法具有姓氏,因此对于我的INSERT是一个参数。
我如何比较和后续检查字段姓氏是否已经在表中?
由于
答案 0 :(得分:2)
如果字段必须是唯一的,则应始终在表中使用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;
}
....
答案 1 :(得分:0)
仅当表中的值尚未包含时,此SQL才会插入新记录:
INSERT INTO Your_Table ( LastName )
SELECT @NewLastName
WHERE NOT EXISTS( SELECT * FROM Your_Table WHERE LastName = @NewLastName )
答案 2 :(得分:0)
有两个选项,一个是来自sql,另一个方法是来自代码。
遗憾的是,您无法更改您同意@David的SQL代码。
从背后的代码你必须做这样的事情。
首先,您必须从表中选择所有数据并检查该数据。像这样的东西。
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
}
这可以帮助你,你可以理解。