指点下我写的代码?

dadihongchang 2009-10-25 11:17:11
刚转学c#,写了一点点代码 ,请指点下,我这样写行不?
最好多发表自己的意见。。
万分感谢!

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Member_database
{
public class sqldbconnection
{
public static SqlConnection mysqlcon = new SqlConnection("server=.;userid=sa;password=123;database=member");

public void Mysql_conOpen()
{
try{
if (mysqlcon.State == ConnectionState.Open){
}
if (mysqlcon.State == ConnectionState.Closed){
mysqlcon.Open();
}

}catch (Exception ex){
if (ex!= null) mysqlcon = null;
}
}

public void Mysql_conClose()
{
try{
if (mysqlcon.State == ConnectionState.Open){
mysqlcon.Close();
mysqlcon.Dispose();
}
if (mysqlcon.State == ConnectionState.Closed){
mysqlcon.Dispose();
}
}catch (Exception ex){
if (ex != null) mysqlcon = null;
}
}

public static SqlDataReader SqlReader(string SqlCmd)
{
SqlDataReader sqldr = null;
// Mysql_conOpen;
SqlCommand cmd = new SqlCommand(SqlCmd, mysqlcon);
try{
sqldr = cmd.ExecuteReader();
}catch (Exception ex){
if (ex != null) sqldr = null;
}
return sqldr;
}

public static SqlCommand Ex_SqlCmd(string sqlcmd)
{
SqlCommand cmd = null;
// Mysql_conOpen();
cmd = new SqlCommand(sqlcmd, mysqlcon);
try{
cmd.ExecuteNonQuery();
}catch (Exception ex){
if (ex != null) cmd = null;
}
return cmd;
}

public static DataTable Read_table(string sqlcmd)
{
DataTable dt = null;
dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(sqlcmd, mysqlcon);
try{
da.Fill(dt);
}catch (Exception ex){
if (ex != null) dt = null;
}
return dt;
}

public static DataSet Read_Dataset(string sqlcmd)
{
DataSet ds = null;
ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlcmd, mysqlcon);
try{
da.Fill(ds);
}catch (Exception ex){
if (ex != null) ds = null;
}
return ds;
}
}
}
...全文
247 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
myhooo102206 2009-10-26
  • 打赏
  • 举报
回复
不错,学的很快!
JGood 2009-10-26
  • 打赏
  • 举报
回复
语法层面上,命名没有统一的规范,一会使用"_"来区分多个单词(如:Read_Dataset),一会使用每个单词的首字母大写来区分(如:SqlReader),一会儿又上面两种方式的结合(如:Read_table)


具体代码段:
try{
if (mysqlcon.State == ConnectionState.Open){ // 多余
}
if (mysqlcon.State == ConnectionState.Closed){
mysqlcon.Open();
}

}catch (Exception ex){
if (ex!= null) mysqlcon = null; // 多余, ex肯定 != null
}

// .....

个人意见:很多代码段我觉得莫名其秒。
if (mysqlcon.State == ConnectionState.Closed){
mysqlcon.Dispose(); // 已经dispose掉了,mysqlcon就不能重用了。再调用Mysql_conOpen()就会有问题
}

下面方法,如果连接没有打开,支持肯定会出错。
SqlReader
Ex_SqlCmd
Read_table
Read_dataset
dadihongchang 2009-10-26
  • 打赏
  • 举报
回复
请求继续指导。。
后天结贴!
dadihongchang 2009-10-26
  • 打赏
  • 举报
回复
谢谢各位指点!!!
继续学习。。
wartim 2009-10-26
  • 打赏
  • 举报
回复
无用代码太多
catch (Exception ex){
if (ex!= null) mysqlcon = null;
}
这个判断没有意义,ex肯定不会为null的
不要一直打开着连接。用using结构比较好,连接用完就释放掉
using (SqlConnection Connection=new SqlConnection(...))
{
...
}
否则控制会很烦,
你把异常给吃掉会有很多麻烦
比如这么三条语句

1 Mysql_conOpen() ;
2 执行dataadapter/command。。。
3 Mysql_conClose();

如果1 Mysql_conOpen()发生了异常会发生什么?
catch (Exception ex){
if (ex!= null) mysqlcon = null;
}

你直接把异常吃掉而且连接=null
于是程序继续运行,执行2和3,因为连接=null 所以 2的时候一定会出错了,所以你又要

try
{
1 Mysql_conOpen() ;
2 执行dataadapter/command。。。
3 Mysql_conClose();
}
catch
{
...
}

那Mysql_conOpen里异常捕获就没有意义了,还不如不写

还有如果再开了事务,
1 Mysql_conOpen() ;
2 执行dataadapter/command。。。
3 Mysql_conClose();

2里开了事务,但开完后又发生了异常,所以还是要try

try
{
1 Mysql_conOpen() ;
2 执行dataadapter/command。。。
3 Mysql_conClose();
}
finally
{
if 开了事务?
回滚事务
}

代码看起来还是很累赘,内部异常捕获还是没用

所以这样比较好

using (SqlConnection Connection=new SqlConnection(...))
try
{
Connection.Open(); // 如果是dataadapter.fill数据连open都不需要
...
}
catch(Exception e)
{
比如事务回滚
}
yuanhuiqiao 2009-10-26
  • 打赏
  • 举报
回复
提一点,一般SqlDataReader,SqlCommand等用完就应该清了,不需长时间保留,比如
using (SqlDataReader sqldr= SqlCmd.ExecuteReader())
{
。。。。。。
}
SqlCmd.Dispose();
liaoyukun111 2009-10-26
  • 打赏
  • 举报
回复
加油吧
24K純帥 2009-10-26
  • 打赏
  • 举报
回复
不错。。try,catch分的太多感觉没必要
wuyq11 2009-10-26
  • 打赏
  • 举报
回复
SqlCommand里多使用using,try catch尽量少
ExecuteReader(CommandBehavior.CloseConnection);
张家可 2009-10-26
  • 打赏
  • 举报
回复
继续支持。。。
张家可 2009-10-26
  • 打赏
  • 举报
回复
UP
limii 2009-10-26
  • 打赏
  • 举报
回复
up
Flyingdragon168 2009-10-26
  • 打赏
  • 举报
回复
楼主,加油。
heguodong 2009-10-26
  • 打赏
  • 举报
回复
说的比较好,本来有更详细的信息,被你的cath(Exception ex)抹杀了
这就好象,你明知道你的肾脏有问题导致脸色鸡黄,你却只是用擦脸油去遮盖,这种事情做多了以后,系统出了问题,却再也找不到问题的根节
我记得有本书上说到了这一点,印象中应该是:核心编程 或者 .Net框架设计
什么时候cath(Exception ex)可以用呢
在遇到无法解决的问题,导致程序崩溃的时候,也就是说你的catch块里应该只有类似的代码
cath(Exception ex)
{
Exist(0);
}
个人意见,仅供参考
[Quote=引用 17 楼 yuxuanji 的回复:]
删除这行 if (mysqlcon.State == ConnectionState.Open){    }
catch (Exception ex)
最好改为cath(SqlException ex)

[/Quote]
cadtian 2009-10-26
  • 打赏
  • 举报
回复
观摩中
heping173 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lzhdim 的回复:]
能不用try catch就不用。节省系统资源。。。
[/Quote]
谬论,异常不捕获直接退出了系统
heping173 2009-10-26
  • 打赏
  • 举报
回复
执行完操作,最好关闭连接,mysqlcon.close();在每个方法中首行调用Mysql_conOpen,避免连接为关闭状态;

if (mysqlcon.State == ConnectionState.Open){
}
这句是多余的,看着有些别扭

SqlReader在连接关闭时,返回的值也就会不复存在,所以不适宜放在此类中
nonesharp 2009-10-26
  • 打赏
  • 举报
回复
一个小意见:命名问题,“Mysql***" 我一眼看上去还以为是用于MySQL的。
lzhdim 2009-10-26
  • 打赏
  • 举报
回复
能不用try catch就不用。节省系统资源。。。
taoistong 2009-10-26
  • 打赏
  • 举报
回复
么啥大的错误
不过你这个有什么作用的

复用性不是很强啊

加载更多回复(9)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧