このSqlParameterのリストにオブジェクトを割り当ててから、SqlCommandを実行しようとしていますが、オブジェクトの1つがSqlDbTypeに変換できないという例外がスローされます。私は、これらのオブジェクトをパラメータコレクションリストに追加する前に、そのようなオブジェクトを処理することをお勧めします。では、パラメータリストに追加された値が適切かどうかをチェックするにはどうすればよいですか?どのようなプロパティをチェックする必要がありますか?値がSqlDbTypeと互換性があるかどうかを知る/チェックする方法?
ここにありますが、私のコードです:
bool Submit(Progs progs, CommandType commandType, string commandText)
{
try
{
List<SqlParameter> paramCollection = new List<SqlParameter>();
foreach(Prog p in progs)
{
SqlParameter spTemp = new SqlParameter { ParameterName = p.Name , Value = p.Value};
paramCollection.Add(spTemp);
using (SqlConnection con = GetConnection())
{
SqlCommand cmd = new SqlCommand { CommandType = commandType, CommandText = commandText, Connection = con };
con.Open();
cmd.Parameters.AddRange(paramCollection); // Exception is thrown from this line
cmd.ExecuteNonQuery();
}
return true;
}
catch(Exception exc)
{
return false;
}
}
例外thown言う: のマッピングが知られている管理プロバイダのネイティブ型にオブジェクト型sol2.CodeBase.BL.Letter []から存在していません。
PS:SqlParameterのみ実行時に表示され、(はい、それはのparamaterではなく、パラメータの)ParamaterIsSqlTypeと呼ばれるのためにプロパティがあります(つまり、私は次の行にブレークポイントをspTempを検査する場合)としています常にfalseに設定されていますか?これはどんな種類のプロパティなので、実行時にのみ表示されますか?また、この "ParamaterIsSqlType"の値が示す値は?
このプロパティは、非公共である、したがって、あなたはそれを見ないでも使用することができますどちらも、はい、それはスペルミスですが、[固定されることはありません] (http://connect.microsoft.com/VisualStudio/feedback/details/90483/the-word-parameter-is-misspelled-in-the-paramaterissqltype-flag-in-the-non-public-members-of-system -data-sqlclient-sqlparameter)を使用します。 –
'param'とは何ですか?それはどこに宣言されていますか?また、[InvalidOperationException](http://msdn.microsoft.com/en-us/library/system.invalidoperationexception.aspx)が発生する必要があります接続を2回開いています。 –
ya、これは入力ミスで、今修正されました。それでは、変換が可能かどうかを確認するにはどうすればよいですか?また、このparamaterIsSqlTypeは何を示していますか(なぜそれは常にfalseか、それが真となるか)? – MrClan