桌面程序开发入门(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执行下面的全部语句。

CREATE DATABASE TestDB
GO
USE TestDB
GO
CREATE TABLE Student
    (
      SID INT IDENTITY(1, 1)
              NOT NULL ,
      SName NVARCHAR(50) NOT NULL ,
      Sex NVARCHAR(2) NOT NULL ,
      Area NVARCHAR(20) NOT NULL ,
      Email NVARCHAR(50) NOT NULL
    )
ON  [PRIMARY]
GO
INSERT  INTO dbo.Student
        ( SName, Sex, Area, Email )
VALUES  ( N'风花雪月', N'', N'北京', N'abc@qq.com' ),
        ( N'泡椒田鸡', N'', N'上海', N'abcd@qq.com' ),
        ( N'红灯酒绿', N'', N'天津', N'abc@qq.com' );
GO
CREATE PROCEDURE getStudents @p_SID INT
AS
    BEGIN
        SET NOCOUNT ON;
        IF NOT EXISTS ( SELECT  SID
                        FROM    dbo.Student
                        WHERE   SID = @p_SID )
            PRINT 'The student does not exists.'
        ELSE
            SELECT  SID ,
                    SName ,
                    Sex ,
                    Area ,
                    Email
            FROM    dbo.Student
            WHERE   SID = @p_SID
    END
GO
--测试--
--EXEC dbo.getStudents @p_SID = 2 -- int
-->2    泡椒田鸡    女    上海    abcd@qq.com

四、在程序配置文件中添加数据库连接字符串,这里是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个窗体,并指定自己的父窗体,代码没什么可讲的,都一个德行。

private void useCommandToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formCommandProc form = new formCommandProc();
            form.MdiParent = this;
            form.Show();
        }

        private void useDataAdapterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formDataAdapterProc form = new formDataAdapterProc();
            form.MdiParent = this;
            form.Show();
        }

        private void createXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formXMLCreate form = new formXMLCreate();
            form.MdiParent = this;
            form.Show();
        }

        private void readXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formXMLRead form = new formXMLRead();
            form.MdiParent = this;
            form.Show();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

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

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:我把整个文件的代码都放上来了,重点是按钮点击事件!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Procedure
{
    public partial class formCommandProc : Form
    {
        public formCommandProc()
        {
            InitializeComponent();
        }

        private void btnGet_Click(object sender, EventArgs e)
        {
            try
            {
                //接受到的学号文本类型转换为整型int
                Convert.ToInt32(tbxSID.Text);
            }
            catch
            {
                tbxGetStudent.Text += "The student ID does not exists.";
                tbxGetStudent.Text += "\r\n";
                return;
            }

            //这句要引用System.Configuration.dll
            string strConnect = System.Configuration.ConfigurationManager.ConnectionStrings["TestDBConnectionString"].ToString();
            //这句需要添加 using System.Data.SqlClient;
            SqlConnection objConnect = new SqlConnection(strConnect);

            SqlCommand objCommand = new SqlCommand("getStudents", objConnect);
            objCommand.Parameters.Add("@p_SID", SqlDbType.Int);
            objCommand.Parameters["@p_SID"].Value = tbxSID.Text;
            objCommand.CommandType = CommandType.StoredProcedure;
            try
            {
                if (objConnect.State == ConnectionState.Closed)
                {
                    objConnect.Open();
                }
                SqlDataReader objDataReader = objCommand.ExecuteReader();
                if (objDataReader.HasRows ==false)
                {
                    tbxGetStudent.Text += "The student does not exists.";
                    tbxGetStudent.Text += "\r\n";
                }
                else
                {
                    while (objDataReader.Read())
                    {
                        tbxGetStudent.Text += objDataReader.GetValue(0).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(1).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(2).ToString() + "\t";
                        tbxGetStudent.Text += objDataReader.GetValue(3).ToString() + "\t";
                        tbxGetStudent.Text += "\r\n";
                    }
                }
                objDataReader.Close();
            }
            catch(Exception exp)
            {
                tbxGetStudent.Text += exp.Message;
                tbxGetStudent.Text += "\r\n";
            }
            finally
            {
                if(objConnect.State == ConnectionState.Open)
                {
                    objConnect.Close();
                }
            }

        }
    }
}

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

posted @ 2018-08-14 10:16  夜雨声烦丶  阅读(13938)  评论(3编辑  收藏  举报