zoukankan      html  css  js  c++  java
  • kms访问数据库的方式(该篇只是作为个人笔记,不具有任何公共参考意图)

    项目类型:winform

    语言:C#

    服务程序:webservice(webservice我本人也不了解,在下一章中会总结一下对它的概念的简单理解)

    情景描述:简单创建一个窗体,实现学生信息(姓名、性别)的新增和查询

    一、保存按钮下的事件:

     1  private void btnSave_Click(object sender, EventArgs e)
     2         {
     3             try
     4             { 
     5                 List<SqlPara> list = new List<SqlPara>();
     6                 list.Add(new SqlPara("stuName",txtName.Text));
     7                 list.Add(new SqlPara("stuSex",txtSex.Text));
     8                 SqlParasEntity sps = new SqlParasEntity(OperType.Execute, "AddStudentInfo", list);
     9                 int result = SqlHelper.ExecuteNoQuery(sps);
    10                 if(result > 0)
    11                 {
    12                     MessageBox.Show("操作成功!");
    13                     return;
    14                 }
    15             }   
    16             catch(Exception ex)
    17             {
    18                 MessageBox.Show(ex.ToString());
    19                 return;
    20             }
    21         }

    二、创建方法中使用到的类(使用一个类库统一管理这些类型)

     1 //参数对象
     2     public class SqlPara
     3     {
     4         public string ParaName
     5         { get; set; }
     6         public object ParaValue
     7         { get; set; }
     8         public SqlPara(string n, object o)
     9         {
    10             this.ParaName = n;
    11             this.ParaValue = o;
    12         }
    13     }
    14 
    15 //表示数据库操作类型
    16     public enum OperType
    17     {
    18         Query = 1,//查询
    19 
    20         Execute = 2//执行
    21     }
    22 
    23 //实例化对象(构造函数的重载,实现不同数据库操作的对象实例化)
    24     public class SqlParasEntity
    25     {
    26         public OperType OperType
    27         { get; set; }
    28         public string procedureName
    29         { get; set; }
    30         public List<SqlPara> ParaList
    31         { get; set; }
    32         public SqlParasEntity(OperType type, string proName, List<SqlPara> list)
    33         {
    34             OperType = type;
    35             procedureName = proName;
    36             ParaList = list;
    37         }
    38         public SqlParasEntity(OperType type,string proName)
    39         {
    40             OperType = type;
    41             procedureName = proName;
    42         }
    43     }

    三、第一大点中第九行的方法:int result = SqlHelper.ExecuteNoQuery(sps);

     1 namespace DAL
     2 {
     3     public class SqlHelper
     4     {
     5         private static int ver = 1;
     6         public static int ExecuteNoQuery(SqlParasEntity ent)
     7         {
     8             int flag = ExecuteNoQuery(ent, ver);
     9             return flag;
    10         }
    11         private static int ExecuteNoQuery(SqlParasEntity ent, int ver)
    12         {
    13             DataSet ds = new DataSet();
    14             DataTable dt = new DataTable(ent.procedureName);
    15             dt.Columns.Add("pname");
    16             dt.Columns.Add("pvalue");
    17             ds.Tables.Add(dt);
    18             if (ent.ParaList == null)
    19             {
    20                 List<SqlPara> list = new List<SqlPara>();
    21                 ent.ParaList = list;
    22             }
    23             foreach(var item in ent.ParaList)
    24             {
    25                 if (item.ParaValue.GetType() == typeof(DataTable))
    26                 {
    27                     DataTable table = (item.ParaValue as DataTable).Copy();
    28                     table.TableName = item.ParaName;
    29                     ds.Tables.Add(table);
    30                 }
    31                 else
    32                 {
    33                     dt.Rows.Add(item.ParaName,item.ParaValue);
    34                 }
    35             }
    36             SqlResult result = new SqlResult();
    37             JsonSerializerSettings settings = new JsonSerializerSettings();
    38             settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    39             SqlParasTable data = new SqlParasTable(ent.OperType,ds);
    40             string json = JsonConvert.SerializeObject(data,settings);
    41             result = HttpHelper.HttpPost(string.Format("ver={0}&json={1}",ver,json));
    42             if (result.State == 1)
    43             {
    44                 int count = 0;
    45                 if (StringHelper.IsNumberId(result.Result))
    46                 {
    47                     count = Convert.ToInt32(result.Result);//这个为什么这样做
    48                 }
    49                 return count;
    50             }
    51             else
    52             {
    53                 throw new Exception("返回信息:
    " + result.Result.Replace("数据库访问异常:","").Replace("错误信息","").Trim());
    54             }
    55         }
    56     }
    57 }

    四、第三大点中41行代码方法:result = HttpHelper.HttpPost(string.Format("ver={0}&json={1}",ver,json));

    1、先创建使用到的类型,三大点中36,39行 

     1 public class SqlResult
     2     {
     3         /// <summary>
     4         /// sql执行返回状态:1成功,2失败
     5         /// </summary>
     6         public int State
     7         { get; set; }
     8 
     9         /// <summary>
    10         /// 如果state是1,则返回结果集(DataSet);State=0,返回错误信息
    11         /// </summary>
    12         public string Result
    13         { get; set; }
    14     }
    15 
    16 
    17 /// <summary>
    18     /// 数据库操作提交参数
    19     /// </summary>
    20     public class SqlParasTable
    21     {
    22         public OperType OperType
    23         { get; set; }
    24 
    25         /// <summary>
    26         /// 参数集合,表类型
    27         /// <para>第一个 table 是简单的数据类型,键值类型</para>
    28         /// <para>第二 table 放表类型的参数(例如批量导入数据时)</para>
    29         /// </summary>
    30         public DataSet ParasDataSet
    31         { get; set; }
    32         public SqlParasTable(OperType type,DataSet ds)
    33         {
    34             OperType = type;
    35             ParasDataSet = ds;
    36         }
    37     }

     2、三大点中41行方法:

     1 namespace DAL
     2 {
     3     class HttpHelper
     4     {
     5         public static string urlPage = "kms1.ashx";
     6        // static string domain = "http://192.168.2.139:8090/";
     7         static string domain = "http://localhost:28383/";
     8         public static SqlResult HttpPost(string data)
     9         {
    10             string url = domain + urlPage;
    11             SqlResult result = new SqlResult();
    12             try
    13             {
    14                 string json = "";
    15                 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    16                 req.Proxy = null;
    17                 req.Method = "post";
    18                 req.ContentType = "application/x-www-form-urlencoded";
    19                 req.Timeout = 600000;
    20 
    21                 byte[] btbody = Encoding.UTF8.GetBytes(data);
    22                 req.ContentLength = btbody.Length;
    23                 using (Stream st = req.GetRequestStream())
    24                 {
    25                     st.Write(btbody, 0, btbody.Length);
    26                     st.Close();
    27                     st.Dispose();
    28                 }
    29                 WebResponse wr = req.GetResponse();
    30                 using (StreamReader sr = new StreamReader(wr.GetResponseStream()))
    31                 {
    32                     json = sr.ReadToEnd();
    33                     sr.Close();
    34                     sr.Dispose();
    35                 }
    36                 wr.Close();
    37                 result = JsonConvert.DeserializeObject<SqlResult>(json);
    38             }
    39             catch (WebException ex)
    40             {
    41                 result.State = 0;
    42                 result.Result = "远程访问错误,
    " + ex.Message;
    43             }
    44             catch (Exception ex)
    45             {
    46                 result.State = 0;
    47                 result.Result = ex.Message;
    48             }
    49             return result;
    50         }
    51     }
    52 }

    章结尾:上面的数据库访问失败了。公司项目代码是这样的逻辑,但我没有使用过webservice服务,想自己搭建然后访问,但是没有成功。

    上面的内容供自己参考一下数据传输的设计理念,后面要掌握一下webservice服务,实现数据访问

    查询的操作方式和上面基本一致,将数据库放回结果转换为自己想要的数据类型即可(DataSet)

  • 相关阅读:
    python3操作mysql数据库表01(封装查询单条、多条数据)
    python3操作mysql数据库表01(基本操作)
    Python3基础02(列表和字符串处理)
    Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )
    Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)
    Python3+Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)
    Python3+Selenium3+webdriver学习笔记11(cookie处理)
    Python3+Selenium3+webdriver学习笔记10(元素属性、页面源码)
    Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)
    Python3+Selenium3+webdriver学习笔记8(单选、复选框、弹窗处理)
  • 原文地址:https://www.cnblogs.com/fllowerqq/p/10782295.html
Copyright © 2011-2022 走看看