OK、このタイプのエラーに関する投稿はたくさんありますが、問題を絞り込むのに十分なほど具体的なものはありません。
SqlConnection con = null;
List<State> list = new List<State>();
try
{
con = Common.openConnection(Common.connectionString);
string sql = "Select * from State order by state";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
State m = new State(int.Parse(reader.GetValue(0).ToString()),reader.GetString(1), reader.GetString(2), int.Parse(reader.GetValue(3).ToString()));
list.Add(m);
}
reader.Close();
}
catch (Exception ex)
{
throw new Exception("Error:[DALStateSQL] in selectAll : " + Common.NEWLINE + ex.ToString());
}
finally
{
Common.closeConnection(con);
}
return list;
これは、問題を引き起こしている方法です。オブジェクト データ ソースに関連付けて、リスト ボックスに表示しようとしているだけです。私はこのスタックトレースを取得しています:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance) +138
System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1953
System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +97
System.Web.UI.WebControls.ListControl.PerformSelect() +34
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66
System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +29
System.Web.UI.Control.PreRenderRecursiveInternal() +103
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Control.PreRenderRecursiveInternal() +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496
私自身のコードであるトレースには何もないので、これは何も教えてくれません。
私は動作する別の同一の方法を持っていますが、それは誤動作している方法の単なるコピーペーストです。状態クラス自体はかなり単純です。
private int stateId;
private string stateCode;
private string name;
private int countryCode;
public int StateId
{
get { return stateId; }
set { stateId = value; }
}
public string StateCode
{
get { return stateCode; }
set { stateCode = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int CountryCode
{
get { return countryCode; }
set { countryCode = value; }
}
public State()
{
this.stateId = 0;
this.stateCode = "";
this.name = "";
this.countryCode = 0;
}
public State(int stateId, string stateCode, string name, int countryCode)
{
this.stateId = stateId;
this.stateCode = stateCode;
this.name = name;
this.countryCode = countryCode;
}
編集: selectAll() メソッドの呼び出しについては別の場所で完全に言及するのを忘れていましたが、オブジェクト データ ソースにバインドしようとすると壊れます。……?