一:所说的简单的三层构架,就是说没有业务逻辑层,将各层没有放到单独的项目中,解决方案如下:

二:form1.cs的详细代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace product
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 插入一条数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
product p= new product(); p.Name="红马車";
//p.Number=50;
// p.Price=5165;
p.C_id = ;
productDAL.insertInfor(p); }
/// <summary>
/// 获得所有信息的总条数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
int result= productDAL.getInforNum();
MessageBox.Show(result.ToString());
}
/// <summary>
/// 删除指定id的一条数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
productDAL.delectInfor();
}
/// <summary>
/// 查询指定id的这条信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
product p = new product();
p= productDAL.getInfor();
MessageBox.Show(p.C_id+p.Name+p.Number); }
}
}

三:product.cs的详细代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace product
{
public class product
{
public int Id {get;set; }
public string Name{get;set;}
public decimal? Price{get;set;}//decimal数据库中,对应vs里的decimal
public int? Number{get;set;}
public int C_id{set;get;} }
}

四:productDAL.cs的详细代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms; namespace product
{
public static class productDAL
{
/// <summary>
/// 方法:将vs里的可空类型转换为数据库认识的可空类型
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
static object toDbValue(object value)
{
if (value == null)
return DBNull.Value;//数据库的空值类型
else
return value;
}
/// <summary>
/// 方法:将数据库的可空类型转换为vs认识的可空类型
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
static object fromDbValue(object value)
{
if (value == DBNull.Value)
return null;//vs里的空值类型
else
return value;
}
/// <summary>
/// 增加一条数据
/// </summary>
public static void insertInfor(product produ)
{
sqlhelper.ExecuteNon(@"insert into product(name,price,number,c_id)values(@name,@price,@number,@c_id)",
new SqlParameter("@name",produ.Name),
new SqlParameter("@price",toDbValue( produ.Price)),
new SqlParameter("@number",toDbValue( produ.Number)),
new SqlParameter("@c_id", produ.C_id));//添加用values,不用value.(@"insert into product(name,price,number,c_id)values(@name,@price,@number,@c_id)"加上@能识别换行符和空格,增加了字符串的长度 }
/// <summary>
/// 返回信息的总条数
/// </summary>
/// <returns></returns>
public static int getInforNum()
{
//int result = sqlhelper.ExecuteNon("select * from product" );
//select * from product和select count(*) from product都是没有受影响的行数
//select count(*) from product用数据库查询就是一个行数,所以返回首行首列就可以了
int result = sqlhelper.ExecuteSca("select count(*) from product");//这里本来是两个参数,那个长度可变参数可以不赋值
return result;
}
/// <summary>
/// 删除指定id的这条数据
/// </summary>
/// <param name="id"></param>
public static void delectInfor(int id)
{
sqlhelper.ExecuteNon("delete product where id=@id",
new SqlParameter("@id",id));//delete,不要写成delect }
/// <summary>
/// 查询指定id的这条数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static product getInfor(int id)
{
DataTable table= sqlhelper.datatable("select * from product where id=@id",
new SqlParameter("@id",id)); if (table.Rows.Count <= )
return null;//没有找到这个id的数据,返回null
else if (table.Rows.Count > )
throw new Exception("id重复了");
else
{
product pro = new product();
DataRow row = table.Rows[]; pro.Name = (string)row["name"];
pro.Price = (decimal?)fromDbValue(row["price"]);//表里是可空类型的用double?
pro.Number = (int?)fromDbValue(row["number"]);
pro.C_id = (int)row["c_id"];
return pro;
} }
}
}

五:sqlhelper.cs的详细代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration; namespace product
{
public static class sqlhelper
{
static SqlConnection conn;
static SqlCommand cmd;
/// <summary>
/// 返回受影响的行数
/// </summary>
private readonly static string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
public static int ExecuteNon(string sql,params SqlParameter[] parameter )
{
using (conn = new SqlConnection(constr))
{
conn.Open();
using (cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
int result = cmd.ExecuteNonQuery();
return result; }
} } /// <summary>
///返回结果的首行首列
/// </summary>
/// <param name="sql"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public static int ExecuteSca(string sql, params SqlParameter[] parameter)
{
using (conn = new SqlConnection(constr))
{
conn.Open();
using (cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
int result = (int) cmd.ExecuteScalar();
return result;
}
}
} /// <summary>
/// 返回一个数据流
/// </summary>
/// <param name="sql"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public static object SqldataRea(string sql, params SqlParameter[] parameter)
{
using (conn = new SqlConnection(constr))
{
conn.Open();
using (cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
SqlDataReader sdr= sdr=cmd.ExecuteReader(); return sdr;
}
}
} /// <summary>
/// 返回一个表
/// </summary>
/// <param name="sql"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public static DataTable datatable(string sql, params SqlParameter[] parameter)
{
using (conn = new SqlConnection(constr))
{
conn.Open();
using (cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds.Tables[];
}
}
}
}
}

使用sqlhelper的简单增删改查的更多相关文章

  1. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  2. Redis:五种数据类型的简单增删改查

    Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...

  3. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  4. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  5. Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

    今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...

  6. sqlhelper sqlparameter 实现增删改查

    这是sqlHelper.cs类,类内里封装了方法 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  7. MyBatis之二:简单增删改查

    这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> ...

  8. 基于springmvc的简单增删改查实现---中间使用到了bean validation

    package com.kite.controller; import java.util.HashMap; import java.util.Map; import javax.validation ...

  9. JDBC实现简单增删改查

    JDBC全称为:Java Data Base Connectivity (java数据库连接),主要用于java与数据库的链接. 整个链接过程如下图: 1.数据库驱动:Driver 加载mysql驱动 ...

随机推荐

  1. (转)Spring读书笔记-----Spring核心机制:依赖注入

    Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...

  2. SQL 中case when then else 用法

    SQL如下: SELECT DISTINCTsy_haken_type,sy_sagyo_type,sy_kokyaku_cdFROm tbl_syukeiWHERE (sy_sagyo_ymd be ...

  3. adb shell dumpsys package 查看versionCode

    adb shell dumpsys package +包名 输出可以查看包名 aapt dump xmltree xxx.apk AndroidManifest.xml 查看AndroidManife ...

  4. Java文件File操作一:文件的创建和删除

    一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...

  5. C++ sizeof总结

    关键字sizeof的作用是返回对象或类型占用的内存字节数,返回值是size_t. 基本数据类型占用的字节数:(32位系统) char 1字节 bool 1字节 short 2字节 int 4字节 lo ...

  6. 3D math primer for graphics and game development

    三角网格(Triangle Mesh) 最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑 ...

  7. OJ的文件流操作

    我们刷题的时候除了编码外,测试也是非常重要的,当测试样例比较小的时候,我们完全可以手打,但是当测试样例比较大时候,我们就抓狂了~ 相信不少人都知道利用文件流,但是应该还有新手跟我一样,一遍又一遍地输入 ...

  8. NoSql之Redis使用(一)

    一.安装 1.下载安装包: 官方网站:redis.io 官方推荐windows版本:https://github.com/MSOpenTech/redis 2:下载压缩包,解压后如下 redis-se ...

  9. 关于MVC中使用dynamic

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2kAAAB6CAIAAACqQIxZAAAgAElEQVR4nO2dT2wcx53v6zgXAgsYvA

  10. C#程序中:如何删除xml文件中的节点、元素。

    C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...