目前,我有一个插入查询到我的表,我不知道如何验证它,如果数据已经存在于表中。
所以现在我只是用try-catch来处理重复条目。我只是想知道,如果值变为catch,是否可以返回一些文本,然后将其显示为alert之类的内容。
以下是我从控制器发出的查询:
public ActionResult AddUser(int id, string name, string age)
{
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
string sqlQuery = "INSERT INTO myTable (id, name, age) VALUES (@id, @name, @age)";
MySqlCommand cmd = new MySqlCommand(sqlQuery, con);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@age", age);
con.Open();
try {
cmd.ExecuteNonQuery();
con.Close();
return RedirectToAction("Index");
}
catch (Exception )
{
con.Close();
return this.Json("This Data already exist on table");
}
}
}
这是我读取控制器查询的脚本:
function add(id, name, age) {
var result = confirm("Are you want to add " + name + " to list?");
if (result == true) {
$.ajax({
url: '/Home/AddUser',
type: 'POST',
data: {
'id': id,
'name': name,
'age': age,
},
success: function (data) {
alert('Data has been successfully added');
},
error: function (jqXhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
}
到目前为止,我可以成功地插入到我的表,但如果已经存在,它是一个重复它将不会做什么,所以用户将不会有一个提示,如果他们已经添加或已经存在或不存在。
任何建议或意见。蒂亚。
2条答案
按热度按时间plicqrtu1#
您可以执行的第一步是创建一个存储过程,其中的输出参数用于显示插入状态,当发现重复数据时,这些参数必须不同:
然后,使用内部的存储过程名称
MySqlCommand
并使用其输出参数返回状态字符串:然后可以根据ajax回调中的当前状态输出消息:
如果你不想和
SELECT
像上面这样查询时,请考虑通过应用UNIQUE
约束并检查中的错误代码1062MySqlException
:eni9jsuy2#
考虑在数据库表中创建一个约束(该列上的唯一约束)。这将防止任何重复的记录被保存,即使它传递了与数据库通信的c代码。
在执行
INSERT
声明。您可以编写一个sql语句,在插入步骤之前进行检查。可能是一个存储过程,其中包含执行此操作的sql脚本,您可以从c方法调用该存储过程。如果您是从ajax代码调用重定向响应,那么返回重定向响应是没有意义的。考虑返回一个json结构,它可以告诉客户端代码记录是成功插入的,还是发现重复的,或者代码崩溃的。
这里有一个简单的例子,我称之为
UserExist
方法,该方法检查是否存在具有指定名称的记录。如果它回来了false
,我将继续执行我将尝试插入的代码。如果您使用的是存储过程,那么也可以在其中添加记录exist检查。在你的
success
掌门人,检查一下status
属性,并向用户显示相应的消息你可以设置
status
json对象的属性failed
当您试图插入重复记录时。您可以为异常处理部件使用特定的异常,该部件可以在数据库级别违反unique key约束时捕获异常。同时向catch块中的用户发送消息。