我的数据库里满对应字段也是DateTime。
转换发生在哪里啊?public bool AddInfo(String title, String content, String postUser, int categoryID)
    {
        StringBuilder strSQL = new StringBuilder();
        SqlParameter[] newsParms = GetParameters();
        SqlCommand cmd = new SqlCommand();
        newsParms[0].Value = title;
        newsParms[1].Value = content;
        newsParms[2].Value = DateTime.Now;//-----------????我没有对类型转换啊? 就是传出的DateTime
        newsParms[3].Value = DateTime.Now;
        newsParms[4].Value = postUser;
        newsParms[5].Value = (int)categoryID;        foreach (SqlParameter parm in newsParms)
            cmd.Parameters.Add(parm);        using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
        {            strSQL.Append(SQL_ADD_INFO);
            conn.Open();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = strSQL.ToString();
            int val = cmd.ExecuteNonQuery();//-----------------执行到这里说String转DateTime失败
            cmd.Parameters.Clear();
            if (val > 0)
                return true;
            else
                return false;
        }
    }
    private static SqlParameter[] GetParameters()
    {
        SqlParameter[] parms = SqlHelper.GetCachedParameters(SQL_ADD_INFO);
        if (parms == null)
        {
            parms = new SqlParameter[]{              new SqlParameter(PARM_TITLE,SqlDbType.NVarChar,20), 
              new SqlParameter(PARM_CONTENT,SqlDbType.NVarChar,500),
              new SqlParameter(PARM_POST_USER,SqlDbType.NVarChar,50), 
              new SqlParameter(PARM_POST_TIME,SqlDbType.DateTime),  //-------这里也都是DateTime呢
              new SqlParameter(PARM_LASTREPLY_TIME,SqlDbType.DateTime),  
              new SqlParameter(PARM_REPLY_COUNT,SqlDbType.Int,4),  
              new SqlParameter(PARM_CATEGORY_ID,SqlDbType.Int,4),  
            };
            SqlHelper.CacheParameters(SQL_ADD_INFO, parms);
        }
        return parms;
    }
}如果上面的部分还不能说明问题
下面就是GetParameters()方法所在的类, 这是老师发的。。看他的演示都是没有问题的using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Collections;
using System.Data.SqlClient;
/// <summary>
/// 数据库的通用访问代码
/// 此类为抽象类,不允许实例化,在应用时直接调用即可
/// </summary>
public abstract class SqlHelper
{
    //获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改
    public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
    // 哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数。
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());    /// <summary>
    ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
    /// 使用参数数组形式提供参数列表 
    /// </summary>
    /// <res>
    /// 使用示例:
    ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </res>
    /// <param name="connectionString">一个有效的数据库连接字符串</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {        SqlCommand cmd = new SqlCommand();        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();            //清空SqlCommand中的参数列表
            cmd.Parameters.Clear();
            return val;
        }
    }    /// <summary>
    ///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接 
    /// 使用参数数组提供参数
    /// </summary>
    /// <res>
    /// 使用示例:  
    ///  int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </res>
    /// <param name="conn">一个现有的数据库连接</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {        SqlCommand cmd = new SqlCommand();        PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }    /// <summary>
    /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 
    /// 使用参数数组提供参数
    /// </summary>
    /// <res>
    /// 使用示例: 
    ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    /// </res>
    /// <param name="trans">一个存在的 sql 事物处理</param>
    /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
    /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
    public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    {
        SqlCommand cmd = new SqlCommand();
        PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
        int val = cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
        return val;
    }    /// <summary>
    /// 获取被缓存的参数
    /// </summary>
    /// <param name="cacheKey">用于查找参数的KEY值</param>
    /// <returns>返回缓存的参数数组</returns>
    public static SqlParameter[] GetCachedParameters(string cacheKey)
    {
        SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];        if (cachedParms == null)
            return null;        //新建一个参数的克隆列表
        SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];        //通过循环为克隆参数列表赋值
        for (int i = 0, j = cachedParms.Length; i < j; i++)
            //使用clone方法复制参数列表中的参数
            clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();        return clonedParms;
    }
}

解决方案 »

  1.   

    如果我眼没花的话,您的两个DateTime参数的索引好象应该是3和4,而不是2和3
      

  2.   

      newsParms[2].Value = DateTime.Now.ToString();
      

  3.   

    if (parms == null)
      {
      parms = new SqlParameter[]{
      new SqlParameter(PARM_TITLE,SqlDbType.NVarChar,20),  
      new SqlParameter(PARM_CONTENT,SqlDbType.NVarChar,500),
      new SqlParameter(PARM_POST_USER,SqlDbType.NVarChar,50),  
      new SqlParameter(PARM_POST_TIME,SqlDbType.DateTime), 
      new SqlParameter(PARM_LASTREPLY_TIME,SqlDbType.DateTime),   
      new SqlParameter(PARM_REPLY_COUNT,SqlDbType.Int,4),   
      new SqlParameter(PARM_CATEGORY_ID,SqlDbType.Int,4),   
      };
    newsParms[0].Value = title;
      newsParms[1].Value = content;
      newsParms[2].Value = "";
     newsParms[3].Value =DateTime.Now;
      newsParms[4].Value = DateTime.Now;
      newsParms[5].Value = 0;
      newsParms[6].Value = (int)categoryID;