2013-03-06 2 views
1

나는 잠시 동안 노력했지만 실제로 이해하지 못합니다. 나는 "암시 적으로 'void'를 'string'으로 암시 적으로 변환 할 수 없습니다." 문자열, int, 무효, 무효, 공용, 정적 및 기타 여러 변형을 시도했습니다.암시 적으로 'void'유형을 'string'으로 변환 할 수 없습니다.

나는 내 DAL과 BLL 내 db thoug에서 하나의 가치를 얻고 싶습니다, 내 코드는 다음과 같습니다.

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Repeater1.DataSource = BLL.getGames(); 
     Repeater1.DataBind(); 
     var culture = CultureInfo.GetCultureInfo("sv-SE"); 
     var dateTimeInfo = DateTimeFormatInfo.GetInstance(culture); 
     var dateTime = DateTime.Today; 
     int weekNumber = culture.Calendar.GetWeekOfYear(dateTime, dateTimeInfo.CalendarWeekRule, dateTimeInfo.FirstDayOfWeek); 
     string mroundY = dateTime.Year.ToString(); 
     string mroundW = weekNumber.ToString(); 
     string mrounddate = mroundY + mroundW; 

     string mround = BLL.getMroundGames(mrounddate); <-- Here's the error 

    } 
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 

    } 
} 

내 BLL은 다음과 같습니다.

public class BLL 
{ 
    public static void getMroundGames(string mrounddate) 
    { 
     SqlCommand getMroundGames = new SqlCommand("SELECT mround FROM gameTB where mround = @mrounddate"); 
     DAL.ExecuteNonQuery(getMroundGames); 
    } 
} 

또한 시도해보십시오.

public class BLL 
{ 
    public static DataTable getMroundGames(string mrounddate) 
    { 
     SqlCommand getMroundGames = new SqlCommand("SELECT mround FROM gameTB where mround = @mrounddate"); 
     getMroundGames.Parameters.Add("@mrounddate", SqlDbType.VarChar, 10).Value = mrounddate; 
     return DAL.GetData(getMroundGames); 
    } 
} 

마지막으로 내 DAL은 이렇게 보입니다.

public class DAL 
    { 
    public static SqlConnection GetConnection() 
     { 
      SqlConnection conn = new 
      SqlConnection(ConfigurationManager.ConnectionStrings["tiptopConnectionString"].ConnectionString); 
      conn.Open(); 
      return conn; 
     } 

    public static DataTable GetData(SqlCommand command) 
    { 
     try 
     { 
      using (SqlConnection conn = GetConnection()) 
      { 
       using (DataSet ds = new DataSet()) 
       { 
        using (SqlDataAdapter da = new SqlDataAdapter()) 
        { 
         da.SelectCommand = command; 
         da.SelectCommand.Connection = conn; 
         da.Fill(ds); 
         return ds.Tables[0]; 
        } 
       } 
      } 
     } 
     catch (Exception err) 
     { 
      throw new ApplicationException(string.Format("Felmeddelande:{0}", err.Message)); 
     } 
    } 

    public static object ExecuteScalar(SqlCommand command) 
    { 
     using (SqlConnection conn = GetConnection()) 
     { 
      command.Connection = conn; 
      object result = command.ExecuteScalar(); 
      return result; 
     } 
    } 

    public static void ExecuteNonQuery(SqlCommand command) 
    { 
     using (SqlConnection conn = GetConnection()) 
     { 
      command.Connection = conn; 
      command.ExecuteNonQuery(); 
     } 
    } 

} 

시작하는 부분?

+5

귀하의 기능은 '무효'즉 아무것도 반환하지 않습니다. 그리고 그것을 문자열에 할당하려고합니다 ... 당신은 무엇을 기대합니까? – Floris

+0

왜 당신은 무효로 돌아오고 있습니까? –

+0

물건을 세게 만드는 대신에 좋습니다. 어떻게하면 aspx 페이지에 단일 값을 표시 할 수있는 간단한 쿼리를 수행 할 수 있습니까? 여기서 mround = 현재 연도의 현재 주. 그래서 SQL은 다음과 같습니다. mround에서 gameTB 선택 mround = 201310 그리고 mroundlabel이라는 ID로 내 라벨에 sql 값을 가져 왔습니까? – Slint

답변

10

이 서명은 잘못되었습니다.

public static void getMroundGames(string mrounddate) 

당신은 비슷한으로 변경해야합니다;

public static string getMroundGames(string mrounddate) 

DAL에서 문자열 값을 검색하고 이에 따라 소비자에게 반환하십시오.

var dt = Dal.GetData(); 
return (string)dt.Rows[0]["field"]; 

그러나 정직한 점에서 나는 귀하의 DAL에서 귀하의 BLL로 데이터 테이블을 전달하지 않을 것입니다. 문자열을 직접 반환하거나 DTO를 소개하고 DAL에서 BLL을 통해 소비자에게 다시 채 웁니다.

1

getMroundGameas (string mrounddate)에 반환 유형 문자열을 추가해야합니다.

DAL 개체의 유형이 명확하지 않지만 ExecuteReader 메서드 인 ExecuteNonQuery 대신 http://msdn.microsoft.com/en-us/library/bb344397.aspx 을 사용해야합니다. Select 문에서 반환 된 값에 대해 쿼리 할 수있는 Reader가 반환됩니다.

마지막으로 값을 반환해야합니다.

관련 문제