ASP.NET 数据库数据不能重复插入
在ASP.NET应用程序中,确保数据库中的数据不会重复插入是一个常见的需求,本文将详细介绍如何实现这一功能,包括使用SQL Server数据库和Entity Framework来实现数据的查重与插入。

1. 创建数据库和表
我们需要创建一个数据库和一张表,用于存储数据,假设我们使用SQL Server数据库,并创建一个名为Products的表:
CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE TABLE Products (
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(50) NOT NULL,
Price DECIMAL(18, 2) NOT NULL,
UNIQUE (Name) -确保产品名称唯一
);
2. 配置ASP.NET项目
我们在Visual Studio中创建一个新的ASP.NET Web应用程序(可以选择Web Forms、MVC或Razor Pages),我们选择ASP.NET MVC模板。
安装Entity Framework
在NuGet包管理器中安装Entity Framework:
Install-Package EntityFramework
添加连接字符串
在web.config文件中添加数据库连接字符串:

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=TestDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
创建数据模型
在项目中添加一个新的类库,用于定义数据模型和数据上下文:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public class Product
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
public decimal Price { get; set; }
}
创建数据上下文
在数据模型类库中,创建数据上下文类:
using System.Data.Entity;
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base("DefaultConnection") { }
public DbSet<Product> Products { get; set; }
}
3. 控制器实现
在MVC项目中,创建一个新的控制器,用于处理产品的增删改查操作:
using System.Linq;
using System.Web.Mvc;
using TestDB.Models; // 替换为实际命名空间
public class ProductController : Controller
{
private readonly ApplicationDbContext _context;
public ProductController()
{
_context = new ApplicationDbContext();
}
// GET: /Product/Create
public ActionResult Create()
{
return View();
}
// POST: /Product/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Name,Price")] Product product)
{
if (ModelState.IsValid)
{
// 检查产品名称是否已存在
if (_context.Products.Any(p => p.Name == product.Name))
{
ModelState.AddModelError("Name", "产品名称已存在。");
return View(product);
}
_context.Products.Add(product);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(product);
}
}
4. 视图实现
在Views/Product/Create.cshtml文件中,创建一个简单的表单用于输入产品信息:

@model TestDB.Models.Product
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>产品信息</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="创建" class="btn btn-default" />
</div>
</div>
</div>
}
5. 运行项目并测试
启动项目,导航到/Product/Create页面,尝试添加新的产品,如果产品名称已经存在,系统会提示错误信息,防止重复插入。
常见问题解答
问题1:如何在不使用Entity Framework的情况下实现数据查重?
答:如果不使用Entity Framework,可以使用ADO.NET直接执行SQL查询。
using System;
using System.Data.SqlClient;
using System.Configuration;
using System.Web.Mvc;
using TestDB.Models; // 替换为实际命名空间
public class ProductController : Controller
{
private string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
// POST: /Product/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Name,Price")] Product product)
{
if (ModelState.IsValid)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string checkQuery = "SELECT COUNT(*) FROM Products WHERE Name = @Name";
using (SqlCommand cmd = new SqlCommand(checkQuery, conn))
{
cmd.Parameters.AddWithValue("@Name", product.Name);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
{
ModelState.AddModelError("Name", "产品名称已存在。");
return View(product);
}
}
}
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string insertQuery = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";
using (SqlCommand cmd = new SqlCommand(insertQuery, conn))
{
cmd.Parameters.AddWithValue("@Name", product.Name);
cmd.Parameters.AddWithValue("@Price", product.Price);
cmd.ExecuteNonQuery();
}
}
return RedirectToAction("Index");
}
return View(product);
}
}
这种方法直接使用SQL查询来检查数据是否存在,并在不存在时插入新数据。
到此,以上就是小编对于“asp.net 数据库数据不能重复插入 代码”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。