使用SqlCommand读取数据表时,抛出"对象必须实现 IConvertible。"的异常,请问这是什么错误?
代码如下:
public override bool Insert()
{
SqlCommand scmCmdToExecute = new SqlCommand();
scmCmdToExecute.CommandText = "dbo.[sp_Comm_ForumPosts_Insert]";
scmCmdToExecute.CommandType = CommandType.StoredProcedure;
scmCmdToExecute.Connection = this.conn;
// 执行查询.
m_iRowsAffected = scmCmdToExecute.ExecuteNonQuery();
m_iID = (Int32)scmCmdToExecute.Parameters["@iID"].Value;
m_iErrorCode = (Int32)scmCmdToExecute.Parameters["@iErrorCode"].Value;
}
问题点数:30、回复次数:5Top
1 楼saucer(思归)回复于 2003-12-03 20:54:21 得分 30
where did you add your parameters to scmCmdToExecute.Parameters for "@iID" and "@iErrorCode ? what is "@iID", a return value or output value?
Top
2 楼kentis(小张->老张)回复于 2003-12-03 22:01:41 得分 0
是的,我把添加参数的部份省略了,我怀疑这个接口是在Sql数据类型转换时用的,添加参数的代码如下:
scmCmdToExecute.Parameters.Add(new SqlParameter("@iPID", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, m_iPID));
scmCmdToExecute.Parameters.Add(new SqlParameter("@sSubject", SqlDbType.NVarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sSubject));
int iLength = 0;
if(!m_sBody.IsNull)
{
iLength = m_sBody.Value.Length;
}
scmCmdToExecute.Parameters.Add(new SqlParameter("@sBody", SqlDbType.Text, iLength, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sBody));
scmCmdToExecute.Parameters.Add(new SqlParameter("@iBlockID", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, m_iBlockID));
scmCmdToExecute.Parameters.Add(new SqlParameter("@iUserID", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, m_iUserID));
scmCmdToExecute.Parameters.Add(new SqlParameter("@daPostDate", SqlDbType.DateTime, 8, ParameterDirection.Input, true, 23, 3, "", DataRowVersion.Proposed, m_daPostDate));
scmCmdToExecute.Parameters.Add(new SqlParameter("@fScore", SqlDbType.Float, 8, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, m_iScore));
scmCmdToExecute.Parameters.Add(new SqlParameter("@sIsPrime", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sIsPrime));
scmCmdToExecute.Parameters.Add(new SqlParameter("@sIsLocked", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sIsLocked));
scmCmdToExecute.Parameters.Add(new SqlParameter("@sIsClosed", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sIsClosed));
scmCmdToExecute.Parameters.Add(new SqlParameter("@daLastRelapse", SqlDbType.DateTime, 8, ParameterDirection.Input, true, 23, 3, "", DataRowVersion.Proposed, m_daLastRelapse));
scmCmdToExecute.Parameters.Add(new SqlParameter("@daLastModifyDate", SqlDbType.DateTime, 8, ParameterDirection.Input, true, 23, 3, "", DataRowVersion.Proposed, m_daLastModifyDate));
scmCmdToExecute.Parameters.Add(new SqlParameter("@sLastModifyBy", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, m_sLastModifyBy));
scmCmdToExecute.Parameters.Add(new SqlParameter("@iVer", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, m_iVer));
scmCmdToExecute.Parameters.Add(new SqlParameter("@iID", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, m_iID));
scmCmdToExecute.Parameters.Add(new SqlParameter("@iErrorCode", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, m_iErrorCode));Top
3 楼kentis(小张->老张)回复于 2003-12-03 22:02:23 得分 0
但是实现这个接口里,它有一大堆的方法要我实现Top
4 楼saucer(思归)回复于 2003-12-03 22:28:36 得分 0
"对象必须实现 IConvertible" normally means there is mis-matched type that ado.net cannot convertTop
5 楼kentis(小张->老张)回复于 2003-12-04 00:14:41 得分 0
Yes,I know , I will never User SqlType!!!Top




