调用DLL访问SQL数据库

这周上完C#课程之后,觉得好难好难。课堂上就听的很糊涂。

事后花了2小时研究了一下代码,感觉其实还是不难的。 课堂上听的晕,大概是因为老师自己也不熟练这份代码,一直修改的缘故吧。

首先是 课堂上 老师 在 SQL Server 2005 中写的存储过程

他的原句是:

create proc sp_count

as

begin

select count(*) from Students

end

我照着打了一遍,结果我的 sql server 2008里提示错误。

翻了一遍《sql自学自用教程》后,重写了2个存储过程

通过变量 @ID 来显示ID对应的数据
CREATE procedure [dbo].[proc_student]
@ID int
AS
SELECT * FROM MM WHERE ID=@ID

————–

//统计数据的总数

CREATE proc [dbo].[proc_count]

as

SELECT COUNT(*) FROM MM

————–

重写的存储过程中不包含begin 和 end, 能顺利通过语法验证。我也不知道老师在课堂写的原版为什么能通过验证,版本问题?懒得管了,反正对sql没兴趣,能用就行了。

然后是在 C#中调用存储过程了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
private void button1_Click_1(object sender, EventArgs e)
        {
            string con = @"server=.;initial Catalog=Hello;integrated Security=True";//sql访问语句
            string com = "proc_student";//定义存储过程名
            SqlConnection conn = new SqlConnection(con);//申明sql连接
            SqlCommand comm = new SqlCommand(com, conn);//申明sql指令
            comm.CommandType = CommandType.StoredProcedure;//申明sql的指令格式为存储过程
            conn.Open();
            comm.Parameters.Add("@ID", SqlDbType.Int, 10);//定义参数 @ID 数据类型,长度
            comm.Parameters["@ID"].Value = int.Parse(tid.Text.Trim());//给参数@ID 赋值
            SqlDataReader sr = comm.ExecuteReader();//建立读取器,读取获取数据之后的结果
            if (sr.Read())
            {
                tname.Text = sr["Sname"].ToString();
            }
            conn.Close();
        }


假设以后开发程序中,要大量使用sql语句的话,sqlconnection,sqlcommand 要重复打很多遍,这样会无形中提高程序的体积和执行效率,所以决定通过调用一个专门连接数据库的类来节约代码量。又因为内部类不适合给多个程序调用,所以决定使用DLL动态链接库的方式。

创建一个 类库 ClassLibrary1


namespace ClassLibrary1
{
    public class Class1
    {
        public static string con = @"server=.;initial Catalog=Hello;integrated Security=True";
        public static int ExecnonQuery(string cmdtext, CommandType ct,SqlParameter[] param)
//申明一个带参数的方法(sql指令,sql指令类型,参数)
        {
            SqlConnection conn = new SqlConnection(con);
            SqlCommand comm = new SqlCommand(cmdtext, conn);
            comm.CommandType = ct;
            if (param != null)//如果参数不为空
            {
                foreach (SqlParameter sp in param)
                {
                    comm.Parameters.Add(sp);//将每个参数都添加进参数数组
                }
            }
            try
            {
                conn.Open();
                int i = int.Parse(comm.ExecuteScalar().ToString());//获取数据总数
                conn.Close();
                return i;//返回数据总数
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }
    }
}


//主程序调用DLL访问数据库


        private void button2_Click(object sender, EventArgs e)
        {
            string cmdtext=("proc_count");//定义存储过程名
            SqlParameter[] param = new SqlParameter[0];//定义参数数组,如果无参数就设为0
            //param[0] = new SqlParameter("@ID", SqlDbType.Int, 10);//参数名,类型,大小
            //param[0].Value = "1";
            int i=ClassLibrary1.Class1.ExecnonQuery(cmdtext, CommandType.StoredProcedure, param);
//调用DLL,并将参数传递进去,并申明一个变量 i 来获得数据总数的返回值)
            ttotal.Text = i.ToString();
        }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.