• 桌面程序开发入门(WinForm with C#)


    1、使用Visual Studio 2013创建新项目

    2、创建一个主窗体和4个子窗体

    3、创建一个数据库、一个表、一个存储过程

    4、在配置文件里添加数据库连接字符串

    5、真正的编码工作。


    第一步:创建新项目,一张图片抵一万字!看图说话,呵呵。。

    第二步:创建4个子窗体,名称分别是formCommandProc.cs、formDataAdapterProc.cs、formXMLCreate.cs、formXMLRead.cs。

    三、创建一个数据库、一个表、一个存储过程。打开MS SQL Server Management Studio执行下面的全部语句。     

     1 CREATE DATABASE TestDB
     2 GO
     3 USE TestDB
     4 GO
     5 CREATE TABLE Student
     6     (
     7       SID INT IDENTITY(1, 1)
     8               NOT NULL ,
     9       SName NVARCHAR(50) NOT NULL ,
    10       Sex NVARCHAR(2) NOT NULL ,
    11       Area NVARCHAR(20) NOT NULL ,
    12       Email NVARCHAR(50) NOT NULL
    13     )
    14 ON  [PRIMARY]
    15 GO
    16 INSERT  INTO dbo.Student
    17         ( SName, Sex, Area, Email )
    18 VALUES  ( N'风花雪月', N'', N'北京', N'abc@qq.com' ),
    19         ( N'泡椒田鸡', N'', N'上海', N'abcd@qq.com' ),
    20         ( N'红灯酒绿', N'', N'天津', N'abc@qq.com' );
    21 GO
    22 CREATE PROCEDURE getStudents @p_SID INT
    23 AS
    24     BEGIN
    25         SET NOCOUNT ON;
    26         IF NOT EXISTS ( SELECT  SID
    27                         FROM    dbo.Student
    28                         WHERE   SID = @p_SID )
    29             PRINT 'The student does not exists.'
    30         ELSE
    31             SELECT  SID ,
    32                     SName ,
    33                     Sex ,
    34                     Area ,
    35                     Email
    36             FROM    dbo.Student
    37             WHERE   SID = @p_SID
    38     END
    39 GO
    40 --测试--
    41 --EXEC dbo.getStudents @p_SID = 2 -- int
    42 -->2    泡椒田鸡    女    上海    abcd@qq.com
    View Code

    四、在程序配置文件中添加数据库连接字符串,这里是Windows集成,所以没有看到用户名和密码的属性。添加完后,在代码里就可以通过TestDBConnectionString这个字符串连接数据库了!

         

    五、开始设计窗体和写代码(这些步骤比较繁琐,所以再细分几个步骤,这样比较清晰)

    5.1)设计主窗体

          1.在创建新项目的时候,系统会默认创建一个名为Form1.cs的主窗体,现在把它更名为FormMain.cs
         
    2.在工具栏拖动MenuStrip控件到主窗体,主菜单横向有3项,分别是:存储过程、XML、退出。存储过程包括:使用Command 和 使用DataAdapter; XML包括:创建XML和读取XML; 具体设置参照下表:

    (Name)属性 Text属性 单击事件处理程序  
    procedureToolStripMenuItem 存储过程  
    useCommandToolStripMenuItem  使用Command useCommandToolStripMenuItem_Click  
    useDataAdapterToolStripMenuItem 使用DataAdapter useDataAdapterToolStripMenuItem_Click  
    xmlToolStripMenuItem XML  
    createXMLToolStripMenuItem 创建XML createXMLToolStripMenuItem_Click  
    readXMLToolStripMenuItem  读取XML  readXMLToolStripMenuItem_Click  
    exitToolStripMenuItem 退出 exitToolStripMenuItem_Click  
           

          3.选中主窗体,在属性窗口修改IsMdiContainer为True,这样就把这个普通的窗体变成了父窗体。如图:

          4.添加4个事件的处理程序和一个退出程序事件,程序的功能是实例化4个窗体,并指定自己的父窗体,代码没什么可讲的,都一个德行。

     1 private void useCommandToolStripMenuItem_Click(object sender, EventArgs e)
     2         {
     3             formCommandProc form = new formCommandProc();
     4             form.MdiParent = this;
     5             form.Show();
     6         }
     7 
     8         private void useDataAdapterToolStripMenuItem_Click(object sender, EventArgs e)
     9         {
    10             formDataAdapterProc form = new formDataAdapterProc();
    11             form.MdiParent = this;
    12             form.Show();
    13         }
    14 
    15         private void createXMLToolStripMenuItem_Click(object sender, EventArgs e)
    16         {
    17             formXMLCreate form = new formXMLCreate();
    18             form.MdiParent = this;
    19             form.Show();
    20         }
    21 
    22         private void readXMLToolStripMenuItem_Click(object sender, EventArgs e)
    23         {
    24             formXMLRead form = new formXMLRead();
    25             form.MdiParent = this;
    26             form.Show();
    27         }
    28 
    29         private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    30         {
    31             Application.Exit();
    32         }
    View Code

    到目前位置,程序基本都可以运行起来了,只不过没具体干什么,先看看运行起来的样子,没点击一个菜单项都会创建一个子窗体,如图:

    5.接下来就是要设计子窗体的样式和功能了。

    打开formCommandProc设计模式界面,安照下表属性添加相关控件:

    (Name)属性 Text属性 控件类型  单击事件
    formCommandProc 使用Command对象执行存储过程 System.Windows.Forms.Form
     label1  学号: System.Windows.Forms.Label  无
     tbxSID  无 System.Windows.Forms.TextBox  
     btnGet  查找 System.Windows.Forms.Button  btnGet_Click
     tbxGetStudent  无(Multiline属性为True)表示多行 System.Windows.Forms.TextBox  

    按钮单击事件处理程序btnGet_Click:我把整个文件的代码都放上来了,重点是按钮点击事件!

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9 using System.Windows.Forms;
    10 using System.Data.SqlClient;
    11 
    12 namespace Procedure
    13 {
    14     public partial class formCommandProc : Form
    15     {
    16         public formCommandProc()
    17         {
    18             InitializeComponent();
    19         }
    20 
    21         private void btnGet_Click(object sender, EventArgs e)
    22         {
    23             try
    24             {
    25                 //接受到的学号文本类型转换为整型int
    26                 Convert.ToInt32(tbxSID.Text);
    27             }
    28             catch
    29             {
    30                 tbxGetStudent.Text += "The student ID does not exists.";
    31                 tbxGetStudent.Text += "
    ";
    32                 return;
    33             }
    34 
    35             //这句要引用System.Configuration.dll
    36             string strConnect = System.Configuration.ConfigurationManager.ConnectionStrings["TestDBConnectionString"].ToString();
    37             //这句需要添加 using System.Data.SqlClient;
    38             SqlConnection objConnect = new SqlConnection(strConnect);
    39 
    40             SqlCommand objCommand = new SqlCommand("getStudents", objConnect);
    41             objCommand.Parameters.Add("@p_SID", SqlDbType.Int);
    42             objCommand.Parameters["@p_SID"].Value = tbxSID.Text;
    43             objCommand.CommandType = CommandType.StoredProcedure;
    44             try
    45             {
    46                 if (objConnect.State == ConnectionState.Closed)
    47                 {
    48                     objConnect.Open();
    49                 }
    50                 SqlDataReader objDataReader = objCommand.ExecuteReader();
    51                 if (objDataReader.HasRows ==false)
    52                 {
    53                     tbxGetStudent.Text += "The student does not exists.";
    54                     tbxGetStudent.Text += "
    ";
    55                 }
    56                 else
    57                 {
    58                     while (objDataReader.Read())
    59                     {
    60                         tbxGetStudent.Text += objDataReader.GetValue(0).ToString() + "	";
    61                         tbxGetStudent.Text += objDataReader.GetValue(1).ToString() + "	";
    62                         tbxGetStudent.Text += objDataReader.GetValue(2).ToString() + "	";
    63                         tbxGetStudent.Text += objDataReader.GetValue(3).ToString() + "	";
    64                         tbxGetStudent.Text += "
    ";
    65                     }
    66                 }
    67                 objDataReader.Close();
    68             }
    69             catch(Exception exp)
    70             {
    71                 tbxGetStudent.Text += exp.Message;
    72                 tbxGetStudent.Text += "
    ";
    73             }
    74             finally
    75             {
    76                 if(objConnect.State == ConnectionState.Open)
    77                 {
    78                     objConnect.Close();
    79                 }
    80             }
    81 
    82         }
    83     }
    84 }
    View Code

    现在试运行一下程序,应该可以从数据库里读取数据了!

    明天再写吧。。

  • 相关阅读:
    Day 39 管道 、数据共享与地址池
    Day 38 Semaphore ,Event ,队列
    Day37 多进程
    Day 36 网络编程-计算机的发展
    Day 35 验证客户端的合法性+socketserver
    Day 34 黏包
    Day 33 Socket编程.
    Day 32 网络编程
    Day 31 面向对象考试题 第四次考试.
    Day 30 面向对象的考试题
  • 原文地址:https://www.cnblogs.com/wanghaibin/p/3708306.html
Copyright © 2020-2023  润新知