这是我在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;
}
}
//****在一般情况下是这样来关闭数据库的连接,和数据集的?
可能比较乱,请大家帮帮忙!谢谢!

...全文
93 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;(此处的引号我没有好好看)

下面的问题也一样
五次多项式换道转向避撞轨迹规划可视化Matlab代码(分析不同车速与路面附着系数对换道时间、距离及横向加速度的影响)内容概要:本文介绍了一套基于五次多项式插值的换道转向避撞轨迹规划方法,并提供了完整的Matlab可视化代码实现。该方法用于自动驾驶或智能车辆在紧急避障场景下的平滑轨迹生成,重点分析了不同初始车速与路面附着系数对换道过程的影响,包括换道所需时间、行驶距离及横向加速度的变化规律,从而评估轨迹的安全性与舒适性。文中通过仿真展示了在多种工况下轨迹的动态特性,帮助理解车辆动力学约束与路面条件对路径规划的影响。; 适合人群:具备一定车辆动力学基础和Matlab编程能力的研究生、科研人员及从事自动驾驶路径规划的工程技术人员。; 使用场景及目标:①研究自动驾驶车辆在避障换道过程中的轨迹生成与优化;②分析车速与路面摩擦系数对换道性能(如时间、距离、横向加速度)的影响;③为智能驾驶系统提供可验证的轨迹规划算法原型与仿真平台; 阅读建议:建议结合Matlab代码逐段运行并调整参数(如车速、附着系数),观察仿真结果变化,深入理解五次多项式在横向轨迹规划中的应用优势与局限,同时可扩展至更复杂的动态环境或多车协同场景。
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制方法。通过结合数据驱动技术与Koopman算子理论,将非线性系统动态近似为高维线性系统,进而利用递归神经网络(RNN)建模并实现系统行为的精确预测。文中详细阐述了模型构建流程、线性化策略及在预测控制中的集成应用,并提供了完整的Matlab代码实现,便于科研人员复现实验、优化算法并拓展至其他精密控制系统。该方法有效提升了纳米级定位系统的控制精度与动态响应性能。; 适合人群:具备自动控制、机器学习或信号处理背景,熟悉Matlab编程,从事精密仪器控制、智能制造或先进控制算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现非线性动态系统的数据驱动线性化建模;②提升纳米定位平台的轨迹跟踪与预测控制性能;③为高精度控制系统提供可复现的Koopman-RNN融合解决方案; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注Koopman观测矩阵构造、RNN训练流程与模型预测控制器(MPC)的集成方式,鼓励在实际硬件平台上验证并调整参数以适应具体应用场景。

111,119

社区成员

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

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

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