work065



webform1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="work065.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>使用三层架构模式,模拟用户注册的示例</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table border="1">
            <tr>
                <td>用户名</td>
                <td>
                    <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="必填" ControlToValidate="txtUserName" Display="Dynamic"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="3-15字符或数字" ControlToValidate="txtUserName" ValidationExpression="\w{3,15}" Display="Dynamic"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td>密码</td>
                <td>
                    <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="必填" ControlToValidate="txtPassword" Display="Dynamic"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="3-15个字符或数字" ControlToValidate="txtPassword" ValidationExpression="\w{3,15}" Display="Dynamic"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td>确认密码</td>
                <td>
                    <asp:TextBox ID="txtCPassword" runat="server" TextMode="Password"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="必填" ControlToValidate="txtCPassword" Display="Dynamic"></asp:RequiredFieldValidator>
                <asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="两次密码不一致" ControlToValidate="txtCPassword" ControlToCompare="txtPassword" Display="Dynamic"></asp:CompareValidator>
                </td>
            </tr>
            <tr>
                <td>找回密码提示问题</td>
                <td>
                    <asp:TextBox ID="txtQuestion" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ErrorMessage="必填" ControlToValidate="txtQuestion" Display="Dynamic"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td>找回密码提示答案</td>
                <td>
                    <asp:TextBox ID="txtAnswer" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ErrorMessage="必填" ControlToValidate="txtAnswer" Display="Dynamic"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:Button ID="btnRegister" runat="server" Text="注册" OnClick="btnRegister_Click" />
                    
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>



webform1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace work065
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
{
            Page.UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;

        }

        protected void btnRegister_Click(object sender, EventArgs e)
{
            Entity.Users1 user01 = new Entity.Users1();
            user01.UserName = txtUserName.Text;
            user01.Password1 = txtPassword.Text;
            user01.PasswordQuestion = txtQuestion.Text;
            user01.PasswordAnswer = txtAnswer.Text;

            if(BLL.Users1BLL.AddUser(user01))
            {
                Response.Write("<script>javascript:alert('注册成功!');</script>");
            }
            else
            {
                Response.Write("<script>javascript:alert('注册失败!');</script>");
            }

            ClearText();
        }

        private void ClearText()
{
            txtUserName.Text = string.Empty;
            txtQuestion.Text = string.Empty;
            txtAnswer.Text = string.Empty;
        }
    }
}




user1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entity
{
    /// <summary>
    /// 实体层,用户实体类
    /// </summary>
    public class Users1
    {
        //字段
        private int _userId;
        private string _userName;
        private string _password1;
        private DateTime _regDate;
        private int _loginCount;
        private DateTime _lastLoginDate;
        private string _passwordQuestion;
        private string _passwordAnswer;
        private bool _isForbidden;

        /// <summary>
        /// 用户编号
        /// </summary>
        public int UserId
        {
            get { return this._userId; }
            set { this._userId = value; }
        }

        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get { return this._userName; }
            set { this._userName = value; }
        }

        /// <summary>
        /// 登录密码
        /// </summary>
        public string Password1
        {
            get { return this._password1; }
            set { this._password1 = value; }
        }

        /// <summary>
        /// 注册时间
        /// </summary>
        public DateTime RegDate
        {
            get { return this._regDate; }
            set { this._regDate = value; }
        }

        /// <summary>
        /// 登录次数
        /// </summary>
        public int LoginCount
        {
            get { return this._loginCount; }
            set { this._loginCount = value; }
        }

        /// <summary>
        /// 最后登录时间
        /// </summary>
        public DateTime LastLoginDate
        {
            get { return this._lastLoginDate; }
            set { this._lastLoginDate = value; }
        }

        /// <summary>
        /// 找回密码提示问题
        /// </summary>
        public string PasswordQuestion
        {
            get { return this._passwordQuestion; }
            set { this._passwordQuestion = value; }
        }

        /// <summary>
        /// 找回密码答案
        /// </summary>
        public string PasswordAnswer
        {
            get { return this._passwordAnswer;}
            set { this._passwordAnswer = value;}
        }

        /// <summary>
        /// 是否被禁止登录
        /// </summary>
        public bool IsForbidden
        {
            get { return this._isForbidden; }
            set { this._isForbidden = value; }
        }


    }
}



assemblyinfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("DAL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("DAL")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("4fc41c46-91f4-4a53-a149-59644a434e2b")]

// 程序集的版本信息由下面四个值组成:
//
//      主版本
//      次版本 
//      生成号
//      修订号
//
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]



web.config

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
  <connectionStrings>
    <add name="connect" connectionString="Data Source=(local);Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=123456;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>



sql

create table Users1(
  userId int identity(1,1) not null,
  username nvarchar(30) not null,
  password1 nvarchar(50) not null,
  regdate datetime null default getdate(),
  logincount int null default 1,
  lastlogindate datetime null default getdate(),
  passwordquestion nvarchar(30) not null,
  passwordanswer nvarchar(30) not null,
  isforbidden bit null default 0,
  primary key(userId),
  unique(username)
)








work066



webform1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="work066.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>GDI+,图片文件上传到数据库保存的示例</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table border="0">
            <tr>
                <td>选择图片</td>
                <td>
                    <asp:FileUpload ID="FileUpload1" runat="server" />
                </td>
                <td>
                    <asp:Button ID="Button1" runat="server" Text="上传" OnClick="Button1_Click" />
                </td>
            </tr>
        </table>
        <hr />
        <asp:Button ID="Button2" runat="server" Text="GridView中显示图片" OnClick="Button2_Click" />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="3" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px">
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="编号"/>
                <asp:BoundField DataField="FileName" HeaderText="图片名称"/>
                <asp:BoundField DataField="FileLength" HeaderText="图片大小(字节)"/>
                <asp:BoundField DataField="Mime" HeaderText="MIME"/>
                <asp:BoundField DataField="UploadDate" HeaderText="上传时间"/>
                <asp:TemplateField HeaderText="查看图片">
                    <ItemTemplate>
                        <a href='WebForm2.aspx?id=<%#Eval("ID") %>'>查看</a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <FooterStyle BackColor="White" ForeColor="#000066" />
            <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
            <RowStyle ForeColor="#000066" />
            <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#007DBB" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#00547E" />
        </asp:GridView>
    </div>
    </form>
</body>
</html>



webform1.asxp.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace work066
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
{

        }

        //上传
        protected void Button1_Click(object sender, EventArgs e)
{
            if (FileUpload1.HasFile)
            {
                string fileName = FileUpload1.FileName;
                int fileLength = FileUpload1.PostedFile.ContentLength;
                string mime = FileUpload1.PostedFile.ContentType;
                byte[] fileData = FileUpload1.FileBytes;

                //所有图片文件的MIME都是已image开始的
                if (mime.StartsWith("image/"))
                {
                    string sql = "insert into FileList(FileName,FileData,FileLength,Mime) values(@fName,@fData,@fLength,@fMime)";
                    System.Data.SqlClient.SqlParameter[] parameters = new System.Data.SqlClient.SqlParameter[4];

                    parameters[0] = new System.Data.SqlClient.SqlParameter();
                    parameters[0].ParameterName = "@fName";
                    parameters[0].SqlDbType = System.Data.SqlDbType.NVarChar;
                    parameters[0].SqlValue = 50;
                    parameters[0].Value = fileName;

                    parameters[1] = new System.Data.SqlClient.SqlParameter();
                    parameters[1].ParameterName = "@fData";
                    parameters[1].SqlDbType = System.Data.SqlDbType.Image;
                    parameters[1].SqlValue = int.MaxValue;
                    parameters[1].Value = fileData;

                    parameters[2] = new System.Data.SqlClient.SqlParameter();
                    parameters[2].ParameterName = "@fLength";
                    parameters[2].SqlDbType = System.Data.SqlDbType.Int;
                    parameters[2].SqlValue = 4;
                    parameters[2].Value = fileLength;

                    parameters[3] = new System.Data.SqlClient.SqlParameter();
                    parameters[3].ParameterName = "@fMime";
                    parameters[3].SqlDbType = System.Data.SqlDbType.VarChar;
                    parameters[3].SqlValue = 20;
                    parameters[3].Value = mime;

                    System.Data.SqlClient.SqlConnectionStringBuilder bu = new System.Data.SqlClient.SqlConnectionStringBuilder();
                    bu.DataSource = "(local)";
                    bu.InitialCatalog = "test";
                    bu.UserID = "sa";
                    bu.Password = "123456";

                    SqlDbHelper helper = new SqlDbHelper();
                    helper.ConnectionString = bu.ConnectionString;

                    if (helper.ExecuteNonQuery(sql, System.Data.CommandType.Text, parameters) > 0)
                    {
                        Response.Write("<script>javascript:window.alert('上传成功');</script>");
                    }
                    else
                    {
                        Response.Write("<script>window.alert('上传失败');</script>");
                    }

                }
                else
                {
                    Response.Write("<script>window.alert('请上传图片');</script>");
                }

            }
            else
            {
                Response.Write("<script>window.alert('请上传文件');</script>");
            }
        }

        //显示
        protected void Button2_Click(object sender, EventArgs e)
{
            System.Data.SqlClient.SqlConnectionStringBuilder bu = new System.Data.SqlClient.SqlConnectionStringBuilder();
            bu.DataSource = "(local)";
            bu.InitialCatalog = "test";
            bu.UserID = "sa";
            bu.Password = "123456";

            string sql = "select * from FileList";
            SqlDbHelper helper = new SqlDbHelper(bu.ConnectionString);
            GridView1.DataSource = helper.ExecuteDataTable(sql);
            GridView1.DataBind();

        }
    }
}


webform2.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace work066
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
{
            int fileID = 0;

            //如果传过来的参数能转换为数字
            if(int.TryParse(Request.QueryString["id"],out fileID))
            {
                System.Data.SqlClient.SqlConnectionStringBuilder bu = new System.Data.SqlClient.SqlConnectionStringBuilder();
                bu.DataSource = "(local)";
                bu.InitialCatalog = "test";
                bu.UserID = "sa";
                bu.Password = "123456";

                SqlDbHelper robot1 = new SqlDbHelper(bu.ConnectionString);

                string sql = "select * from FileList where ID=@id";
                System.Data.SqlClient.SqlParameter[] paras = new System.Data.SqlClient.SqlParameter[1];
                paras[0] = new System.Data.SqlClient.SqlParameter("@id",System.Data.SqlDbType.Int,4);
                paras[0].Value = fileID;

                System.Data.SqlClient.SqlDataReader reader = robot1.ExecuteReader(sql, System.Data.CommandType.Text, paras);

                byte[] data = null;
                string mime = string.Empty;
                //按编号查询,最多只有一条记录,所以使用if,没有使用while循环
                if (reader.Read())
                {
                    data = reader["FileData"] as byte[]; //强制转换
                    mime = (string)(reader["mime"]);    //强制转换,两种方式相同
                }
                //读取数据之后要关闭
                reader.Close();

                //如果图片有数据
                if(data != null && data.Length > 0)
                {
                    Response.Clear(); //先清空
                    Response.ContentType = mime; //设定页面为mime图片对应的格式
                    System.IO.MemoryStream mStream = new System.IO.MemoryStream(data); //利用内存流,读图片

                    System.Drawing.Bitmap image = new System.Drawing.Bitmap(mStream); //从内存流中,生成位图图片
                    image.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); //将图片保存至页面输出流中
                    image.Dispose(); //释放图片对象
                    Response.End();
                }
            }
        }
    }
}


sqldbhelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace work066
{
    /// <summary>
    /// asp.net 三层架构
    /// 针对sql server数据库操作的通用类
    /// 作者:虾米大王
    /// 日期:2021年6月1日
    /// 版本: 1.0
    /// </summary>
    public class SqlDbHelper
    {

        private string _connectionString;

        /// <summary>
        /// 构造函数
        /// </summary>
        public SqlDbHelper()
        {

        }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="connectionString">数据库的连接字符串</param>
        public SqlDbHelper(string connectionString)
        {
            this._connectionString = connectionString;
        }

        /// <summary>
        /// 设置数据库连接字符串
        /// </summary>
        public string ConnectionString
        {
            set
            {
                this._connectionString = value;
            }
        }

        /// <summary>
        /// 执行查询,返回DataTable结果集
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <param name="parameters">执行语句的参数数组</param>
        /// <returns>DataTable结果集</returns>
        public System.Data.DataTable ExecuteDataTable(string sql, System.Data.CommandType cmdType, System.Data.SqlClient.SqlParameter[] parameters)
        {
            System.Data.DataTable table1 = new System.Data.DataTable();

            //使用using,是为了包含其中的代码执行结束后自动关闭
            using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(this._connectionString))
            {
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con))
                {
                    cmd.CommandType = cmdType;
                    if (parameters != null)
                    {
                        foreach (System.Data.SqlClient.SqlParameter para in parameters)
                        {
                            cmd.Parameters.Add(para);
                        }
                    }
                    System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd);
                    adapter.Fill(table1);
                }
            }

            return table1;
        }

        /// <summary>
        /// 执行查询,返回DataTable结果集(函数同名,重构)
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <returns>DataTable结果集</returns>
        public System.Data.DataTable ExecuteDataTable(string sql)
        {
            return ExecuteDataTable(sql, System.Data.CommandType.Text, null);
        }

        /// <summary>
        /// 执行查询,返回DataTable结果集(函数同名,重构)
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <returns>DataTable结果集</returns>
        public System.Data.DataTable ExecuteDataTable(string sql, System.Data.CommandType cmdType)
        {
            return ExecuteDataTable(sql, cmdType, null);
        }

        /// <summary>
        /// 执行查询,返回一个SqlDataReader的对象实例
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <param name="parameters">参数数组</param>
        /// <returns>SqlDataReader对象实例</returns>
        public System.Data.SqlClient.SqlDataReader ExecuteReader(string sql, System.Data.CommandType cmdType, System.Data.SqlClient.SqlParameter[] parameters)
        {
            System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(this._connectionString);
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con);
            if (parameters != null)
            {
                foreach (System.Data.SqlClient.SqlParameter para in parameters)
                {
                    cmd.Parameters.Add(para);
                }
            }
            con.Open();
            //执行行为,关闭reader,同时自动关闭con
            return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        }

        /// <summary>
        /// 执行查询,返回一个SqlDataReader的对象实例(函数同名,重构)
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <returns>SqlDataReader对象实例</returns>
        public System.Data.SqlClient.SqlDataReader ExecuteReader(string sql)
        {
            return ExecuteReader(sql, System.Data.CommandType.Text, null);
        }

        /// <summary>
        /// 执行查询,返回一个SqlDataReader的对象实例(函数同名,重构)
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">SqlDataReader对象实例</param>
        /// <returns>SqlDataReader对象实例</returns>
        public System.Data.SqlClient.SqlDataReader ExecuteReader(string sql, System.Data.CommandType cmdType)
        {
            return ExecuteReader(sql, cmdType, null);
        }

        /// <summary>
        /// 执行查询,返回结果集为首行首列的值
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <param name="parameters">参数数组</param>
        /// <returns>首行首列的值</returns>
        public Object ExecuteScalar(string sql, System.Data.CommandType cmdType, System.Data.SqlClient.SqlParameter[] parameters)
        {
            object result = null;

            using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(this._connectionString))
            {
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con))
                {
                    cmd.CommandType = cmdType;

                    if (parameters != null)
                    {
                        foreach (System.Data.SqlClient.SqlParameter para in parameters)
                        {
                            cmd.Parameters.Add(para);
                        }
                    }
                    con.Open();
                    result = cmd.ExecuteScalar();
                }
            }

            return result;
        }

        /// <summary>
        /// 执行查询,返回结果集为首行首列的值
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <returns>首行首列的值</returns>
        public Object ExecuteScalar(string sql)
        {
            return ExecuteScalar(sql, System.Data.CommandType.Text, null);
        }

        /// <summary>
        /// 执行查询,返回结果集为首行首列的值
        /// </summary>
        /// <param name="sql">要执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <returns>首行首列的值</returns>
        public Object ExecuteScalar(string sql, System.Data.CommandType cmdType)
        {
            return ExecuteScalar(sql, cmdType, null);
        }

        /// <summary>
        /// 对数据库执行增删改操作
        /// </summary>
        /// <param name="sql">执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <param name="parameters">参数数组</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(string sql, System.Data.CommandType cmdType, System.Data.SqlClient.SqlParameter[] parameters)
        {
            int count = 0;

            using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(this._connectionString))
            {
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con))
                {
                    cmd.CommandType = cmdType;

                    if (parameters != null)
                    {
                        foreach (System.Data.SqlClient.SqlParameter para in parameters)
                        {
                            cmd.Parameters.Add(para);
                        }
                    }

                    con.Open();
                    count = cmd.ExecuteNonQuery();
                }
            }
            //执行insert,update,delete之后,返回的受影响行数
            return count;
        }

        /// <summary>
        /// 对数据库执行增删改操作(函数同名,重构)
        /// </summary>
        /// <param name="sql">执行的SQL语句</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(string sql)
        {
            return ExecuteNonQuery(sql, System.Data.CommandType.Text, null);
        }

        /// <summary>
        /// 对数据库执行增删改操作(函数同名,重构)
        /// </summary>
        /// <param name="sql">执行的SQL语句</param>
        /// <param name="cmdType">执行语句的类型,可以是存储过程或者SQL文本</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(string sql, System.Data.CommandType cmdType)
        {
            return ExecuteNonQuery(sql, cmdType, null);
        }

        /// <summary>
        /// 返回当前数据库中,由用户创建的所有表
        /// </summary>
        /// <returns>DataTable结果集</returns>
        public System.Data.DataTable GetTables()
        {
            System.Data.DataTable table1 = null;

            using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(this._connectionString))
            {
                con.Open();
                table1 = con.GetSchema("Tables");
            }

            return table1;
        }
    } 
}


sql

create table FileList(
  ID bigint identity(1,1) not null,
  FileName nvarchar(50) not null,
  FileData image not null,
  FileLength int not null,
  Mime varchar(20) not null,
  UploadDate datetime null default getdate(),
  primary key(id) 
)