1

しばらく試してみましたが、本当にわかりません。「タイプ 'void' を 'string' に暗黙的に変換できません」というエラーが表示されます

DAL と BLL を使用してデータベースから 1 つの値を取得したいのですが、コードは次のようになります。

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();
        }
    }

}

どこから始めますか?

4

2 に答える 2

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 を介してこれを消費者に入力します。

于 2013-03-06T23:31:19.413 に答える
2

getMroundGameas(string mrounddate) に文字列の戻り型を追加する必要があります。

オブジェクト DAL の種類は明確ではありませんが、おそらく ExecuteNonQuery ではなく、 http://msdn.microsoft.com/en-us/library/bb344397.aspxの ExecuteReader メソッドも使用する必要があります。これにより、select ステートメントによって返される値を照会できる Reader が返されます。

最後に、値を返す必要があります。

于 2013-03-06T23:40:47.920 に答える