日期:2014-05-18  浏览次数:20570 次

麻烦前辈帮我解释一段代码
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;

}

}

------解决方案--------------------
string sqlString = "GetDiaryIdFromUserName "; // "GetDiaryIdFromUserName "不是sql语句吧,用在这做什么?
------------------------------------------------------
他这是存储过和名,在这就是声明一下,后面好调用!


sqlCmd.Parameters.AddWithValue( "@UserName ", UserName);//Parameters属性(不知道能不能说属性)能做什么?最好形象点,MSDN的解释一直看不懂;
----------------------