麻烦前辈帮我解释一段代码

zhengkf 2007-07-23 12:37:38
using System.Data;
using System.Data.SqlClient;


public class OnlineDiary
{
const string conString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\DiaryDB.mdf;Integrated Security=True;User Instance=True";


public static int GetDiaryIdFromUserName(string UserName)
{
int DiaryId;
SqlConnection diaryDBConn = new SqlConnection(conString);
string sqlString = "GetDiaryIdFromUserName";
//"GetDiaryIdFromUserName"不是sql语句吧,用在这做什么?
SqlCommand sqlCmd = new SqlCommand(sqlString, diaryDBConn);
//接上,其他教程中,sqlString都是非常正规的SQL语句,比如“select
* from 表名”,如果是这样,那这句很好理解,表示要进行select
* from 表名操作,但现在sqlString = "GetDiaryIdFromUserName",又表示进行什么操作?

try {

sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@UserName", UserName);
//Parameters属性(不知道能不能说属性)能做什么?最好形象点,MSDN的解释一直看不懂;AddWithValue("@UserName", UserName)作用又是什么,我以为是没加这句它全部检索,加了只检索出数据表中列UserName中,符合UserName的项,不知道是否错误?

diaryDBConn.Open();
SqlDataReader diarySQLDR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
//这句又干什么用?我的理解是关闭diarySQLDR时候自动关闭diaryDBConn,不知道有没错?如果是这样,感觉挺没用的。
sqlCmd = null;
if (diarySQLDR.Read())
{
DiaryId = (int)diarySQLDR("DiaryId");
}
//这个我理解是遍历数据表,找出列UserName中,值为UserName的,进行相应的赋值。因为UserName的值是唯一的,所以diarySQLDR.Read()只有一次为真。不知道错了没?
else
{
DiaryId = -1;
}

diarySQLDR.Close();
diarySQLDR = null;
}


catch (Exception ex) {
DiaryId = -1;
}
finally {
diaryDBConn.Close();
diaryDBConn = null;
}

return DiaryId;
}

public static void InsertDiary(string UserName, string FirstName, string LastName)
{
SqlConnection diaryDBConn = new SqlConnection(conString);
string sqlString = "InsertDiary";
//同上,也是InsertDiary非正规SQL语句问题。
SqlCommand sqlCmd = new SqlCommand(sqlString, diaryDBConn);
sqlCmd.CommandType = CommandType.StoredProcedure;

sqlCmd.Parameters.AddWithValue("@UserName", UserName);
sqlCmd.Parameters.AddWithValue("@FirstName", FirstName);
sqlCmd.Parameters.AddWithValue("@LastName", LastName);
//同上,属性Parameters作用的形象描述。
diaryDBConn.Open();
sqlCmd.ExecuteNonQuery();
diaryDBConn.Close();
sqlCmd = null;
diaryDBConn = null;

}

}
...全文
208 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
LixingTie 2007-07-23
  • 打赏
  • 举报
回复
SqlDataReader diarySQLDR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
//这句又干什么用?我的理解是关闭diarySQLDR时候自动关闭diaryDBConn,不知道有没错?如果是这样,感觉挺没用的。
-------------------------------------
你的理解是对的,这个的用处主要是:如果你写了一个数据访问类,该类的某方法返回一个DataReader,当你使用完DataReader的时候,你需要关闭连接,但是你又访问不到数据访问类的Connection,这个时候CommandBehavior.CloseConnection的作用就体现出来了.
assassina 2007-07-23
  • 打赏
  • 举报
回复
楼上正解
jinpeng_dotnet 2007-07-23
  • 打赏
  • 举报
回复
建议在网上找一本《ado.net中文手册.chm》的电子书看一看。
LixingTie 2007-07-23
  • 打赏
  • 举报
回复
回答:

//"GetDiaryIdFromUserName"不是sql语句吧,用在这做什么?
1、GetDiaryIdFromUserName 是储存过程名. 按名称理解应该是从数据库中根据用户名返回日记ID,你说的那些select from这些都是在SQL数据库里写好的.程序直接调用.

//Parameters属性(不知道能不能说属性)能做什么?最好形象点,MSDN的解释一直看不懂;
Parameters可以理解为数据库的参数,查询或储存过程需要参数时,就是通过Parameters来传递的,就好像你写一个方法,调用方法时需要参数一样,

//AddWithValue("@UserName", UserName)作用又是什么
就是给储存过程添加一个参数,名为@UserName,值为UserName的值.就好像把UserName作为参数传给你写的方法差不多.上面说了,这个储存过程是根据用户名来返回日记ID的,那么根据哪个用户名返回,就是这个参数.
ztwz 2007-07-23
  • 打赏
  • 举报
回复
string sqlString = "GetDiaryIdFromUserName"; //"GetDiaryIdFromUserName"不是sql语句吧,用在这做什么?
------------------------------------------------------
他这是存储过和名,在这就是声明一下,后面好调用!



sqlCmd.Parameters.AddWithValue("@UserName", UserName);//Parameters属性(不知道能不能说属性)能做什么?最好形象点,MSDN的解释一直看不懂;
-----------------------------------------------------------------------------
这个是添加参数,偶不知道要怎么解释才好.



SqlDataReader diarySQLDR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
//这句又干什么用?我的理解是关闭diarySQLDR时候自动关闭diaryDBConn,不知道有没错?如果是这样,感觉挺没用的。
--------------------------------------------------------------------------
理解是对的,但CommandBehavior.CloseConnection是很有用的.比如你返回一个SqlDataReader的时候如果不加CommandBehavior.CloseConnection,哪用完不会关闭连接,这样会一直连接着.







if (diarySQLDR.Read())
{
DiaryId = (int)diarySQLDR("DiaryId");
}
//这个我理解是遍历数据表,找出列UserName中,值为UserName的,进行相应的赋值。因为UserName的值是唯一的,所以diarySQLDR.Read()只有一次为真。不知道错了没?
-------------------------------------------------------------------------------
没看到你说的什么UserName




string sqlString = "InsertDiary";//同上,也是InsertDiary非正规SQL语句问题。
//同上,这是存储过程名
zhengkf 2007-07-23
  • 打赏
  • 举报
回复
这是《ASP.NET 2.0经典案例教程》,在线日记中的一个类代码,相信不少人都看过。
honey52570 2007-07-23
  • 打赏
  • 举报
回复
楼上


我来接分
vfan2010 2007-07-23
  • 打赏
  • 举报
回复
建议楼主看看ado.net,当初我看的时候也是一头雾水呀.
zhengkf 2007-07-23
  • 打赏
  • 举报
回复
还有,都说sqlString = "GetDiaryIdFromUserName"是存储过程名,那这个方法中存储过程是什么?
-------------------------------------
在数据库的存储过程中找!
-------------------------------------
这个问题解决了,也怀疑在那边,果然如此,谢谢!
zhengkf 2007-07-23
  • 打赏
  • 举报
回复
先找本ADO.NET的书看看再来
= =!
---------------------------
找了几天了,没找到我想要的,没办法只好实际中一点点解决,而且不问也带不出楼上那位说的《ado.net中文手册.chm》,正是我想要的。不过不知道怎么回事第一次可以打开,后面再打开就没办法显示了,网上说是微软补丁问题,正在想办法解决。
ztwz 2007-07-23
  • 打赏
  • 举报
回复
-_-b
还有,都说sqlString = "GetDiaryIdFromUserName"是存储过程名,那这个方法中存储过程是什么?
-------------------------------------
在数据库的存储过程中找!
LixingTie 2007-07-23
  • 打赏
  • 举报
回复
还有,都说sqlString = "GetDiaryIdFromUserName"是存储过程名,那这个方法中存储过程是什么?哪个语句体现?
-----------------------
储存过程是在SQL数据库中事先写好的SQL语句.你可以打开数据库,查看GetDiaryIdFromUserName的定义.
MicroSoftor 2007-07-23
  • 打赏
  • 举报
回复
先找本ADO.NET的书看看再来
= =!
zhengkf 2007-07-23
  • 打赏
  • 举报
回复
if (diarySQLDR.Read())
{
DiaryId = (int)diarySQLDR("DiaryId");
}
//这个我理解是遍历数据表,找出列UserName中,值为UserName的,进行相应的赋值。因为UserName的值是唯一的,所以diarySQLDR.Read()只有一次为真。不知道错了没?
----------------------------
这里你理解有点错误.这里上面的代码用DataReader根据存储过程的查询返回了一个数据表,这里是从这个数据表里读一行,如果读取成功(有数据),则把读到行的DiaryId列的数据赋给DiaryId
----------------------------
分开看,是这样。现在我这样理解,上面还有个sqlCmd.Parameters.AddWithValue("@UserName", UserName),对diarySQLDR会有影响,返回的数据表中只包含了符合情况的数据,这里应该只有一个,不知道怎么表述,就是列UserName中,值符合方法输入的参数比如myUserName的,不知道对不对?

还有,都说sqlString = "GetDiaryIdFromUserName"是存储过程名,那这个方法中存储过程是什么?哪个语句体现?不知道表述的对不对,其实我就想知道有哪个语句告诉数据库要进行具体什么操作。

代码中加了杂七杂八的东西挺难看的,我把他们删除掉
public static int GetDiaryIdFromUserName(string UserName)
{
int DiaryId;
SqlConnection diaryDBConn = new SqlConnection(conString);
string sqlString = "GetDiaryIdFromUserName";
SqlCommand sqlCmd = new SqlCommand(sqlString, diaryDBConn);

try
{
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@UserName", UserName);

diaryDBConn.Open();
SqlDataReader diarySQLDR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
sqlCmd = null;
if (diarySQLDR.Read())
{
DiaryId = (int)diarySQLDR("DiaryId");
}
else
{
DiaryId = -1;
}

diarySQLDR.Close();
diarySQLDR = null;
}

catch (Exception ex)
{
DiaryId = -1;
}
finally
{
diaryDBConn.Close();
diaryDBConn = null;
}

return DiaryId;
}
LixingTie 2007-07-23
  • 打赏
  • 举报
回复
if (diarySQLDR.Read())
{
DiaryId = (int)diarySQLDR("DiaryId");
}
//这个我理解是遍历数据表,找出列UserName中,值为UserName的,进行相应的赋值。因为UserName的值是唯一的,所以diarySQLDR.Read()只有一次为真。不知道错了没?
----------------------------
这里你理解有点错误.这里上面的代码用DataReader根据存储过程的查询返回了一个数据表,这里是从这个数据表里读一行,如果读取成功(有数据),则把读到行的DiaryId列的数据赋给DiaryId


其实的不解释了,自己理解!
前言最近随着计算机的发展,软件日益更新,有很多公司发布的产品遭到篡改和破解,在总众多年的历史种逐渐形成了软件保护与软件破解之间的对抗产生了软件逆向工程这本门技术将在如下的课程讲解各种软件逆向知识,软件保护知识,已经破解脱壳反调试知识,为初期学软件逆向不懂而又迷茫的同学门指明一条道路此套课堂能有效助同学们解决软件逆向中所遇到的大部分问题大纲软件逆向工程高级班分为反调试篇汇编篇算法篇补丁篇HOOK篇将在如上这几篇对软件逆向的各个方面进行详解,包括网络验证的分析思路,封包算法的提取,以及各种软件保护技术,无论哪一篇都会从诸多个方面的细节进行详解反调试篇:分为PEB,时间校验,CRC,NtQuery函数,内核过渡等知识要领与诸多方面的综合性详解,细节分为每一节课,每一节课目标清晰无比,每一节深入精髓进行讲解!汇编篇:一个程序编译完成之后是如何通过在计算机运行起来的,其中少不了底层知识的汇编指令,汇编篇中将深入浅出的带领同学们对MASM32SDK的一套汇编库中开发程序,熟悉汇编的原理,如何运用汇编写出一套花指令,并且去除指令,方便以后的算法学习以及为今后的学习打下坚实的基础算法篇:随着编程语言的发展,编程语言的标准也在发展,一些编译器善于运用数学的手法,对程序进行各种优化,然后我们进行分析,我们得需要一步步还原这个优化或清晰了解这个优化才有可能掌握这个数学模型优化,进一步还原代码,算法篇知识要领将在优化,技巧这方面表现的玲离尽致!此篇会带领同学们分析多个语言的算法,包括C/C++算法还原代码还原易语言代码还原 算分开库的实现,制作自己的第一个注册机等!补丁篇:说到补丁,同学们可能第一个想到的就是对方一些网络验证所用到的技巧,我的课程这一方面虽有涉及,但是补丁技术远远不止这一点,我的课程会详解更多的补丁知识原理,包括什么是补丁,补丁的真正概念,前辈们是如何善用补丁对程序的漏洞进行修补损坏的程序。将在此篇一一介绍HOOK篇:详细详解了各种HOOK的原理以及实现代码,包括网上流行所说的超级HOOK,COMHOOK,协议HOOK,代理中转等方法,怎么定位关键位置,环境的保存知识要领,hook关键的注意事项,为自己以后做hook行业打下坚实的基础课程每一个细节讲究的深入骨髓,通俗易懂的学习方式,全程贯彻原理,软件逆向中必不可少少的教程!

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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