我需要使用C#输入一些从Hattrick网站(在线足球经理(获取的数据。数据库结构如下:
MatchID (which is also primary key)
Rating1
Rating2
...
Rating16
所有字段均为TinyInt
。
因为数据的构想方式,如果我输入已经存在的数据库MatchID
,我100%确定其他字段额定 x 将具有相同的值,因此可以安全地忽略异常,以免打扰用户。
为了治疗此例外,我使用了以下代码:
string AddMatchCommand = "Insert into Games values (@Match, @Ratings1, @Ratings2, @Ratings3, @Ratings4, @Ratings5, @Ratings6, @Ratings7, @Ratings8, @Ratings9, @Ratings10, @Ratings11, @Ratings12, @Ratings13, @Ratings14, @Ratings15, @Ratings16)";
SqlConnection MyConn = new SqlConnection(CreateTableConnectionString);
SqlCommand command = new SqlCommand(AddMatchCommand, MyConn);
command.Parameters.AddWithValue("@Match", MatchIDToInsert.ToString(CultureInfo.InvariantCulture));
command.Parameters.AddWithValue("@Ratings1", RatingsToInsert[0].ToString(CultureInfo.InvariantCulture));
command.Parameters.AddWithValue("@Ratings2", RatingsToInsert[1].ToString(CultureInfo.InvariantCulture));
//...
command.Parameters.AddWithValue("@Ratings16", RatingsToInsert[15].ToString(CultureInfo.InvariantCulture));
MyConn.Open();
try
{
command.ExecuteNonQuery();
}
catch (SqlException S)
{
if (S.Number != 2627) //2627 is the ID for the exception I want to ignore
{
MessageBox.Show(S.Message);
}
}
MyConn.Close();
上面的代码可以完成工作。但是,是否有更好的方法来处理这种情况?我很确定我可能会发现一个或两个错误,但是我无法证明这一点。
您可以用这样的查询来避免错误:
Insert into Games
select @Match, @Ratings1, @Ratings2, @Ratings3, @Ratings4, @Ratings5, @Ratings6, @Ratings7, @Ratings8, @Ratings9, @Ratings10, @Ratings11, @Ratings12, @Ratings13, @Ratings14, @Ratings15, @Ratings16
where not exists (select 1 from Games g where g.matchid = @match);