注册 登录
编程论坛 ASP.NET技术论坛

请大家给点耐性看完我写的乱糟糟的代码,并帮忙精简代码,谢谢!

foshan 发布于 2007-03-22 09:49, 1524 次点击

以下是小弟近段时间在几位斑竹老大和网友的帮助下写一个文件上传、下载

25 回复
#2
foshan2007-03-22 10:01
以下代码重重复复在写,而且均是一模一样的,能否在该页中将这些对象变量设置成该页面级别的变量,然后在登录事件中一次过就对这些对象变量赋值,然后再在各个事件中引用就可以了???谢谢!

SqlConnection conn1 = new SqlConnection("data source=(local);database=****;user=****; password=********"); //创建连接对象,并指明要连接的数据库名称、用户名、用户密码

SqlDataAdapter da1 = new SqlDataAdapter(); //创建数据适配器
DataSet ds1 = new DataSet(); //创建DataSet(数据集)
//适配器对象的查询命令
SqlCommand cmdSel = new SqlCommand("select ID,MYDATE,WJLX,WJLJ from baobiao", conn1); //创建DataAdapter(数据适配器)
da1.SelectCommand = cmdSel;
da1.Fill(ds1, "baobiao"); //使用数据适配器填充数据集
#3
冰镇柠檬汁儿2007-03-22 10:02
你写的已经很“好”了,就别让别人帮你精简了
#4
Kendy1234562007-03-22 10:03
太长了 没时间看
#5
foshan2007-03-22 10:05
以下是引用冰镇柠檬汁儿在2007-3-22 10:02:14的发言:
你写的已经很“好”了,就别让别人帮你精简了

#6
冰镇柠檬汁儿2007-03-22 10:06
你把你2楼写的东西放到一个方法下不就可以了吗
#7
冰镇柠檬汁儿2007-03-22 10:11

public DataSet abc(string strSQL)
{
//创建连接对象,并指明要连接的数据库名称、用户名、用户密码
SqlConnection conn1 = new SqlConnection("data source=(local);database=****;user=****; password=********");
SqlDataAdapter da1 = new SqlDataAdapter(); //创建数据适配器
DataSet ds1 = new DataSet(); //创建DataSet(数据集)
//适配器对象的查询命令
SqlCommand cmdSel = new SqlCommand(strSQL, conn1); //创建DataAdapter(数据适配器)
da1.SelectCommand = cmdSel;
da1.Fill(ds1, "baobiao"); //使用数据适配器填充数据集
conn1.Close();
return ds1;
}


这样不就可以了吗

还有一点要说的,data source=(local);database=****;user=****; password=********,这个应该放到web.config文件中

#8
foshan2007-03-22 10:11
我想了解一下,中是否存在以前VBA或VB中谈及的什么全局级变量(变量可供所有的页面来引用)、模块级变量(变量可供在本页其他方法或事件中来引用)???
#9
冰镇柠檬汁儿2007-03-22 10:15
是ASP.NET2.0超级菜鸟,我怕你!!!
#10
foshan2007-03-22 10:21
#11
foshan2007-03-22 10:26
conn1.Close(); ???

不是说 用数据适配器会隐式地自动打开和关闭与数据库的连接的吗?这里没有必要再用 conn1.Close(); 了吧 ??
#12
冰镇柠檬汁儿2007-03-22 10:28
你的8楼的问题我可没深入的研究过,反正我是尽量避免用那些东西,因为用多了很可能会造成进程之间的冲突
#13
冰镇柠檬汁儿2007-03-22 10:30
以下是引用foshan在2007-3-22 10:26:58的发言:
conn1.Close(); ???

不是说 用数据适配器会隐式地自动打开和关闭与数据库的连接的吗?这里没有必要再用 conn1.Close(); 了吧 ??

才发现你居然没OPEN

我不知道你说的是真的还是假的,你可以试试,看看是什么效果

#14
chenjin1452007-03-22 10:32

确实不要自己open close 不过dispose还是要的

#15
冰镇柠檬汁儿2007-03-22 10:41
以下是引用chenjin145在2007-3-22 10:32:13的发言:

确实不要自己open close 不过dispose还是要的

dispose这样的东西不是还有垃圾回收机制吗?看来微软是要把.NET傻瓜化了

#16
foshan2007-03-22 10:46
以下是引用冰镇柠檬汁儿在2007-3-22 10:30:21的发言:

才发现你居然没OPEN

我不知道你说的是真的还是假的,你可以试试,看看是什么效果

我一直没有写 open 和 close ,运行很正常。

dispose 是什么东东来的???

#17
chenjin1452007-03-22 10:47
哪个东西不是往傻瓜化发展啊
#18
foshan2007-03-22 10:57
以下是引用冰镇柠檬汁儿在2007-3-22 10:11:11的发言:

public DataSet abc(string strSQL)
{
//创建连接对象,并指明要连接的数据库名称、用户名、用户密码
SqlConnection conn1 = new SqlConnection("data source=(local);database=****;user=****; password=********");
SqlDataAdapter da1 = new SqlDataAdapter(); //创建数据适配器
DataSet ds1 = new DataSet(); //创建DataSet(数据集)
//适配器对象的查询命令
SqlCommand cmdSel = new SqlCommand(strSQL, conn1); //创建DataAdapter(数据适配器)
da1.SelectCommand = cmdSel;
da1.Fill(ds1, "baobiao"); //使用数据适配器填充数据集
conn1.Close();
return ds1;
}


这样不就可以了吗

还有一点要说的,data source=(local);database=****;user=****; password=********,这个应该放到web.config文件中

试过了,这样不行,在按钮事件中,提示“上下文中不存在名称 conn1 ”、“上下文中不存在名称 ds1
原因是:
1、每个按钮事件中,均各自有 添加、删除、修改的语句,里面要用到数据库连接对象 conn1
SqlCommand cmdInsert = new SqlCommand("insert into baobiao(MYDATE,WJLX,WJLJ) values (@MYDATE,@WJLX,@WJLJ)", conn1);
SqlCommand cmdDel = new SqlCommand("delete from baobiao where ID=@ID", conn1);
SqlCommand cmdUpdate = new SqlCommand("update baobiao set MYDATE = @MYDATE,WJLX = @WJLX,WJLJ = @WJLJ where ID = @ID", conn1);

2、每个按钮事件中,均各自有 添加、删除、修改的语句,里面要用到 数据适配器 da1
da1.InsertCommand = cmdInsert;
da1.DeleteCommand = cmdDel;
da1.UpdateCommand = cmdUpdate;

#19
冰镇柠檬汁儿2007-03-22 11:10
拜托你动脑想想,别总是问别人这种问题好吗
#20
foshan2007-03-22 11:35
可能是再加两句:return da1; 和 return conn1; ,我去试一下先
#21
foshan2007-03-22 11:52
晕,不行。真的是不知道应该如何一次性返回三个对象变量……书本上没有这样的例子,这样也不行:
public DataSet abc(SqlConnection conn1,SqlDataAdapter da1)
{
//创建连接对象,并指明要连接的数据库名称、用户名、用户密码
SqlConnection conn1 = new SqlConnection("data source=(local);database=****;user=****; password=********");
SqlDataAdapter da1 = new SqlDataAdapter(); //创建数据适配器
DataSet ds1 = new DataSet(); //创建DataSet(数据集)
String yefeng = DropDownList1.SelectedItem.ToString() + "年" + DropDownList2.Text + "月";
string strSQL = "select Count(*) from baobiao where WJLX=" + (RadioButtonList1.SelectedIndex.ToString() + 1) + "and MYDATE=" + "'" + yefeng + "'";
//适配器对象的查询命令
SqlCommand cmdSel = new SqlCommand(strSQL, conn1); //创建DataAdapter(数据适配器)
da1.SelectCommand = cmdSel;
da1.Fill(ds1, "baobiao"); //使用数据适配器填充数据集
return ds1;
}
#22
Kendy1234562007-03-22 11:59
。。。

[此贴子已经被作者于2007-3-22 12:00:50编辑过]


#23
bygg2007-03-22 12:36
重复的东西太多...相同的放到一个方法里..
#24
mingtian882007-03-22 12:56

建议你这么写
public DataSet abc()
{
//创建连接对象,并指明要连接的数据库名称、用户名、用户密码
using(SqlConnection conn1 = new SqlConnection("data source=(local);database=****;user=****; password=********");)
{
conn1.Open();
SqlDataAdapter da1 = new SqlDataAdapter(); //创建数据适配器
DataSet ds1 = new DataSet(); //创建DataSet(数据集)
String yefeng = DropDownList1.SelectedItem.ToString() + "年" + DropDownList2.Text + "月";
string strSQL = "select Count(*) from baobiao where WJLX="+ (RadioButtonList1.SelectedIndex.ToString() + 1) + "and MYDATE=" + "'" + yefeng + "'";
//适配器对象的查询命令
SqlCommand cmdSel = new SqlCommand(strSQL, conn1); //创建DataAdapter(数据适配器)
da1.SelectCommand = cmdSel;
da1.Fill(ds1, "baobiao"); //使用数据适配器填充数据集
return ds1;
conn1.Close();
}
}

这些都还需要相应的实例来接收的 conn1等等只是这个作用域能用 其他地方用不了 所以就提示“上下文中不存在名称 conn1 ”、“上下文中不存在名称 ds1

[此贴子已经被作者于2007-3-22 12:59:23编辑过]

#25
mingtian882007-03-22 13:05

另外你的添加、删除、修改也可以写成方法

#26
追梦者2007-03-22 22:52
以下是引用冰镇柠檬汁儿在2007-3-22 10:02:14的发言:
你写的已经很“好”了,就别让别人帮你精简了

1