2011-12-31 46 views
0

如何正确declair在下面的代码的参数。即时得到的“的SelectCommand”下划线林不知道什么即时通讯做错了。选择命令参数的问题

public int GetTotalNumberOfAprovedPictureIds(string SexType) 
    { 
     string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"]; 

     SqlConnection conn = new SqlConnection(strConectionString); 
     conn.Open(); 
     SqlCommand oCommand = new SqlCommand("SELECT COUNT(1) AS Expr1 FROM MEMBERS INNER JOIN Picture ON MEMBERS.MemberID = Picture.MemberID WHERE (Picture.PicAproval = 1) AND (Picture.PicArchive = 0) AND (MEMBERS.MemberSex = @dSexType)", conn); 


     object oValue = oCommand.ExecuteScalar(); 

     oCommand.SelectCommand.Parameters.Add("@dSexType", SqlDbType.Text); 
     oCommand.SelectCommand.Parameters["@dSexType"].Value = SexType; 

     conn.Close(); 

     if (oValue == DBNull.Value) 
     { 
      return 0; 
     } 
     else 
     { 
      return Convert.ToInt32(oValue); 
     } 

    } 
+0

你的IDE是足够聪明,没有如果没有,则弹出的属性列表。你是怎么写这样的陈述的? – Lion 2011-12-31 00:41:59

+0

+1抵消随机-1(不解释)为'using'声明 – 2011-12-31 00:50:55

回答

4

你正在做一些错误的事情;

1)要添加的参数后,你执行你正在使用SelectCommand属性,当你不需要查询

2)。事实上,你可能有DataAdapter对象,它确实有一个SelectCommand属性混淆这一点。

相反,尝试:

public int GetTotalNumberOfAprovedPictureIds(string SexType) 
    { 
     string strConectionString = ConfigurationManager.AppSettings["DataBaseConnection"]; 

     using (SqlConnection conn = new SqlConnection(strConectionString)) 
     { 
      conn.Open(); 
      using (SqlCommand oCommand = new SqlCommand("SELECT COUNT(*) FROM MEMBERS INNER JOIN Picture ON MEMBERS.MemberID = Picture.MemberID WHERE (Picture.PicAproval = 1) AND (Picture.PicArchive = 0) AND (MEMBERS.MemberSex = @dSexType)", conn)) 
      { 
       oCommand.CommandType = CommandType.Text; 
       SqlParameter myParam = oCommand.Parameters.Add("@dSexType", SqlDbType.Text); 
       myParam.Value = SexType; 

       object oValue = oCommand.ExecuteScalar(); 

       if (oValue == DBNull.Value) 
       { 
        return 0; 
       } 
       else 
       { 
        return Convert.ToInt32(oValue); 
       } 
      } 
     } 

    } 

我强烈建议你使用的SqlConnection,SqlCommand的和类似的对象打交道时使用"USING"声明。这将确保您的连接被关闭,因为一旦离开的范围,其中包括一个异常后丢弃。

+0

+1。 – keyboardP 2011-12-31 00:38:35

0

据我所知SqlCommand没有一个叫SelectCommand属性或字段。只是摆脱它:

oCommand.Parameters.Add("@dSexType", SqlDbType.Text); 
oCommand.Parameters["@dSexType"].Value = SexType; 
0
oCommand.Parameters.Add("@dSexType", SqlDbType.Text); 
oCommand.Parameters["@dSexType"].Value = SexType; 

SelectCommand没有这样的属性。直接像上面一样使用。