博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC与Sql Server交互,把字典数据插入数据库
阅读量:5812 次
发布时间:2019-06-18

本文共 4371 字,大约阅读时间需要 14 分钟。

 

在"中,在Controller中拼接sql语句。比如:

 

_db.InsertData("insert into Product(Name,quantity,Price) values('"+productVm.Name+"','"+productVm.Quantity+"','"+productVm.Price+"')");

 

在某些场景中需要把数据放在字典集合中,再插入到数据库。类似如下:

 

_db.InsertDataByDic("表名", 字典集合);

 

这样有更好的可读性。字典集合的键是表的字段们。

 

于是,可以把相对复杂的sql语句拼接放在了帮助类中。在帮助类中增加一个InsertDataByDic方法,该方法遍历字典集合拼接sql语句。

 

 
public class SqlDB
{
protected SqlConnection conn;
 
//打开连接
public bool OpenConnection()
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
try
{
bool result = true;
if (conn.State.ToString() != "Open")
{
conn.Open();
}
return result;
}
catch (SqlException ex)
{
return false;
}
}
 
//关闭连接
public bool CloseConnection()
{
try
{
conn.Close();
return true;
}
catch (Exception ex)
{
 
return false;
}
}
 
//插入数据
public int InsertData(string sql)
{
int lastId = 0;
//string query = sql + ";SELECT @@Identity;";
try
{
if(conn.State.ToString()=="Open")
{
SqlCommand cmd = new SqlCommand(sql, conn);
//cmd.ExecuteNonQuery();
lastId = ToInt(cmd.ExecuteScalar());//返回第一行的第一列
}
return ToInt(lastId);
}
catch (Exception ex)
{
 
return 0;
}
}
 
//转换成整型
private int ToInt(object o)
{
try
{
return int.Parse(o.ToString());
}
catch (Exception ex)
{
 
return 0;
}
}
 
//插入字典数据
public int InsertDataByDic(string tableName, Dictionary
dics)
{
int lastId = 0;
string keyStr = string.Empty;//拼接键
string valStr = string.Empty;//拼接变量
int index = 0;//索引
try
{
foreach (KeyValuePair
item in dics)
{
index++;
//第一次拼接前面逗号
keyStr += (index != 1 ? "," : "") + "[" + item.Key + "]";
valStr += (index != 1 ? "," : "") + "@" + item.Key;
}
 
//拼接sql语句
string query = "insert into " + tableName + "(" + keyStr + ") values (" + valStr + ");SELECT @@Identity;";
if (conn.State.ToString() == "Open")
{
SqlCommand cmd = new SqlCommand(query, conn);
foreach (KeyValuePair
item in dics)
{
cmd.Parameters.AddWithValue("@" + item.Key, item.Value);
}
lastId = ToInt(cmd.ExecuteScalar());
}
return ToInt(lastId);
}
catch (Exception ex)
{
return 0;
}
}
}
 
 

 

在TestController中增加2个名称为AddProductByDic的Action方法,把从前端获取到的视图模型中的数据赋值给字典集合。

 

 
public class TestController : Controller
{
 
private SqlDB _db = new SqlDB();
//
// GET: /Test/
public ActionResult Index()
{
bool r = _db.OpenConnection();
if (r)
{
return Content("连接成功");
}
else
{
return Content("连接失败");
}
}
 
//通过sql语句插入数据
public ActionResult AddProduct()
{
return View();
}
 
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddProduct(ProductVm productVm)
{
if(ModelState.IsValid)
{
_db.OpenConnection();
int result = _db.InsertData("insert into Product(Name,quantity,Price) values('"+productVm.Name+"','"+productVm.Quantity+"','"+productVm.Price+"')");
if(result > 0)
{
ModelState.AddModelError("success", "创建成功");
}
else
{
ModelState.AddModelError("error", "创建失败");
}
_db.CloseConnection();
return RedirectToAction("Index");
}
else
{
return View(productVm);
}
}
 
//通过字典集合插入数据
public ActionResult AddProductByDic()
{
return View();
}
 
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddProductByDic(ProductVm productVm)
{
int i = 0;
if (ModelState.IsValid)
{
_db.OpenConnection();
Dictionary
data = new Dictionary
();
data["Name"] = productVm.Name;
data["quantity"] = productVm.Quantity;
data["Price"] = productVm.Price;
i = _db.InsertDataByDic("Product", data);
_db.CloseConnection();
 
if(i>0)
{
return RedirectToAction("Index");
}
else
{
return View(productVm);
}
}
else
{
return View(productVm);
}
}
}
 
 

 

AddProductByDic.cshtml是一个强类型视图。

 

 
@model Portal.Models.ProductVm
 
@{
ViewBag.Title = "AddProductByDic";
Layout = "~/Views/Shared/_Layout.cshtml";
}
 

AddProductByDic

 
@using (Html.BeginForm("AddProductByDic", "Test", new { @id = "addForm" }, FormMethod.Post))
{
@Html.AntiForgeryToken()
 

ProductVm


@Html.ValidationSummary(true)
 
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
 
 
 
@Html.LabelFor(model => model.Quantity, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Quantity)
@Html.ValidationMessageFor(model => model.Quantity)
 
 
 
@Html.LabelFor(model => model.Price, new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
 
 
 
 
 
 
}
 
@Html.ActionLink("Back to List", "Index")
 
 
 

转载地址:http://hevbx.baihongyu.com/

你可能感兴趣的文章
如何基于阿里云搭建适合初创企业的轻量级架构?
查看>>
再学 GDI+[27]: TGPPen - 画笔样式 - SetDashStyle
查看>>
使用Telnet测试基本POP3服务
查看>>
64位win7 Intel 无线网卡蓝屏的问题
查看>>
了解php中session垃圾回收机制
查看>>
常用git操作
查看>>
C/C++ char 与 unsigned char 使用时要注意的问题
查看>>
jsp生成html
查看>>
xml 和 array的相互转换支持 xml的属性 cdata
查看>>
test
查看>>
tomcat Java heap space 内存溢出
查看>>
golang--使用channel来同步goroutine
查看>>
linux 包管理常忘的一些命令
查看>>
JQ滑动导航菜单的实现
查看>>
VSCode插件开发提示Could not resolve any model with provided uri
查看>>
扒网站心得
查看>>
设计模式的五大原则
查看>>
网站建设关于php写入文本文件时回车的问题
查看>>
mysql 常用函数
查看>>
SyntaxError: unterminated string literal
查看>>