我的数据库里满对应字段也是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;
}
}
转换发生在哪里啊?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;
}
}
解决方案 »
- C#如何实现当鼠标移到button上时,提示该button的功能?
- 怎么知道窗口正在被预览?Windows7系统。
- 急啊!高手请教,我是初学者,现在遇到问题了,关于C#老版本和08的区别?
- 把结构体的变量名(上1000个)加入到COMBO BOX
- 请问c#中有没有十进制转十六进制的函数?
- 关于xtragrid
- 调用外部应用程序的问题,请帮帮忙!谢谢了!
- SQL数据库一次插入多条纪录,怎么写SQL语句?
- 请教各位,如何将windows程序转成web程序,急!
- C#中如何制作安装程序
- 在处理异常时再次发生异常,该怎么处理?
- 4. 编写一个简易加减、乘运算系统程序,要求在规定时间内完成规定题目数,并进行统计,给出统计结果。系统参考界面如下图所示。
{
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;