这是我在C#下第一次写的一个函数对数据库的操作,请高手指点!Knight94(愚翁) 等,谢谢!

vigrous_chen 2003-04-16 07:13:34
由于很多东西不太清楚,比如在对数据库连接的释放、数据集关闭等,想请高手具体指导以下代码中不妥或错误的地方!**标示的是我认为重点模糊的地方。谢谢!
public string BuildDJH(string ZTH,string bh,string T_name,string DHZF)
{
string s_Sql,str;
int FirstValue,NewValue,I;
//定义一些有关数据操作的变量
DateTime dt=DateTime.Now;
bh=bh+dt.ToString("yyyyMM");
SqlConnection thisconnection=new SqlConnection(@"Data Source=127.0.0.1\logistics;"
+"persist security info=False;"
+"user id=sa;password=;Initial Catalog=wlgl");
//打开连接
thisconnection.Open();
SqlDataAdapter thisAdapter=new SqlDataAdapter("select count ("+DHZF+") from "+T_name
+" where ZTH='"+ZTH+"' And "+DHZF+" like'"+bh+"%'",thisconnection);
SqlCommandBuilder thisBuilder=new SqlCommandBuilder (thisAdapter);
DataSet thisDataSet=new DataSet();
thisAdapter.Fill(thisDataSet,"JLSL");
I=thisDataSet.Tables["JLSL"].Rows.Count;
if (I<=0)
//**是否要关闭连接呢?还需要关闭其它的吗?
{ thisconnection.Close();
return bh+"0001";
}
else
//*****在这里我是另外生成的一个SqlDataAdapter,有没有必要,可否用上面的
// thisAdapter,假如用或不用上面的合理的写法是这样的?
{SqlDataAdapter otherAdapter=new SqlDataAdapter("select "+DHZF+" as DJH from "+T_name
+" where ZTH='"+ZTH+"' And "+DHZF+" like'"+bh+"%' order by "+DHZF,thisconnection);
//***同样我也是另外生成的,问题和上面类似
SqlCommandBuilder otherBuilder=new SqlCommandBuilder(otherAdapter);
//***同样我也是另外生成的,问题和上面类似

DataSet otherDataSet=new DataSet();
otherAdapter.Fill(otherDataSet,"DJH");
I=otherDataSet.Tables["DJH"].Rows.Count;
str=otherDataSet.Tables["DJH"].Rows[I-1]["DJH"].ToString().Trim();
str=str.Substring(8,4);
FirstValue=Convert.ToInt32(str);
if (FirstValue<=0)
{ thisconnection.Close();
return bh+"0001";
}
else
{ NewValue=FirstValue+10001;
str=Convert.ToString(NewValue);
str=str.Substring(1,4);
thisconnection.Close();
return bh+str;
}
}
//****在一般情况下是这样来关闭数据库的连接,和数据集的?
可能比较乱,请大家帮帮忙!谢谢!

...全文
81 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidBone 2003-04-18
  • 打赏
  • 举报
回复
up
vigrous_chen 2003-04-17
  • 打赏
  • 举报
回复
谢谢各位老大的关心,尤其谢谢 Knight94(愚翁), zhuohs(凌九霄), cqnimin() ,snewxf(心疤)。谢谢!
rqxiang 2003-04-17
  • 打赏
  • 举报
回复
学习!
Knight94 2003-04-17
  • 打赏
  • 举报
回复
你写的程序有几点需要注意的:
1、对数据库操作,要进行异常处理,这是很重要的;
2、需要传进字符串参数的地方,最好定义一个string变量来写明,以供以后查阅,当然也可复用;
3、把你的做法:先求count,还要获得记录集。转换成直接取得记录集,然后用记录机来判断,这样反而少查询一次数据库;
4、数据库关闭的做法,有的时候不是所有的地方都去关闭,这样又罗嗦,不安全,有时甚至会遗漏;既然函数有返回值,而且可以通过if来做处理,满足条件,做我的数据处理;否则赋给相应的错误值,这样可以统一关闭,再返回,清晰安全。

以上只是我的一些看法,可能不是最好的。
Knight94 2003-04-17
  • 打赏
  • 举报
回复
Sorry,有个错误,把
str=otherDataSet.Tables["DJH"].Rows[I-1]["DJH"].ToString().Trim();
改为
str=thisDataSet.Tables["DJH"].Rows[I-1]["DJH"].ToString().Trim();
Knight94 2003-04-17
  • 打赏
  • 举报
回复
我大概改了一下,看看是否可以,代码如下:

public string BuildDJH(string ZTH,string bh,string T_name,string DHZF)
{
string strResult="";

string s_Sql,str;
int FirstValue,NewValue,I;
//定义一些有关数据操作的变量
DateTime dt=DateTime.Now;
bh=bh+dt.ToString("yyyyMM");

SqlConnection thisconnection=new SqlConnection(@"Data Source=127.0.0.1\logistics;"
+"persist security info=False;"
+"user id=sa;password=;Initial Catalog=wlgl");

try
{
//打开连接
thisconnection.Open();
}
catch(SqlException e)
{
return e.Message;
}

s_Sql="select "+DHZF+" as DJH from "+T_name
+" where ZTH='"+ZTH+"' And "+DHZF+" like'"+bh+"%' order by "+DHZF;

SqlDataAdapter thisAdapter=new SqlDataAdapter(s_Sql,thisconnection);
SqlCommandBuilder thisBuilder=new SqlCommandBuilder (thisAdapter);
DataSet thisDataSet=new DataSet();

try
{
thisAdapter.Fill(thisDataSet,"JLSL");
}
catch(SqlException e)
{
thisConnection.Close();
return e.Message;
}

I=thisDataSet.Tables["JLSL"].Rows.Count;
if(I>0)
{
str=otherDataSet.Tables["DJH"].Rows[I-1]["DJH"].ToString().Trim();
str=str.Substring(8,4);
FirstValue=Convert.ToInt32(str);
if (FirstValue<=0)
{
strResult=bh+"0001";
}
else
{
NewValue=FirstValue+10001;
str=Convert.ToString(NewValue);
str=str.Substring(1,4);
strResult=bh+str;
}
}
thisDataSet.Dispose();
thisDataAdapter.Dispose();
thisconnection.Close();

return strResult;
}
snewxf 2003-04-16
  • 打赏
  • 举报
回复
同意楼上!
你就按楼上兄台给你的这样写!

//*****在这里我是另外生成的一个SqlDataAdapter,有没有必要,可否用上面的
// thisAdapter,假如用或不用上面的合理的写法是这样的?

假如执行相同的操作那必要在重新定义了吧!不说别的。最起码代码也看起来简洁多了呀!
cqnimin 2003-04-16
  • 打赏
  • 举报
回复
try
{
this.sqlConnection.Open();
你的操作
}
catch(Exception err)
{
MessageBox.shwo(err.Message);
}
finally
{
this.sqlconnection.close();
}
zhuohs 2003-04-16
  • 打赏
  • 举报
回复
//**是否要关闭连接呢?还需要关闭其它的吗?
{ this.connection.Close();
return bh+"0001";
}
要关闭,其它不用关闭了,你能关闭什么呢?
//*****在这里我是另外生成的一个SqlDataAdapter,有没有必要,可否用上面的
// thisAdapter,假如用或不用上面的合理的写法是这样的?
你可以不重新定义个适配器,用上面的就可以,不过只是要改一下它的SelectCommand,可以这样:thisAdapter.SelectCommand.CommandText="elect "+DHZF+" as DJH from "+T_name
+" where ZTH='"+ZTH+"' And "+DHZF+" like'"+bh+"%' order by "+DHZF;(此处的引号我没有好好看)

下面的问题也一样
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

110,548

社区成员

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

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

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