【问题标题】:Failed to convert parameter value from a DateTime to a Byte[]无法将参数值从 DateTime 转换为 Byte[]
【发布时间】:2012-03-10 23:33:55
【问题描述】:

将参数从 DateTime 转换为 Byte[] 时出错。 想法是显示通过控件输入并显示在 GridView 上的 2 个指定日期之间的数据,并使用存储过程访问数据。我不明白错误,但我猜测所有数据都放在一个数组中并传递给存储过程:

string sDateBegin = Request.Form["fromDate"];
DateTime dtDateBegin = Convert.ToDateTime(sDateBegin);
SqlParameter prmDateBegin = new SqlParameter("datebegin", SqlDbType.Timestamp);
prmDateBegin.Value = dtDateBegin;
cmdProc.Parameters.Add(prmDateBegin);

//same code for DateEnd

// data table
DataTable dataTable = new DataTable();

AGridView.DataSourceID = null;

// data adapter
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmdProc);
AGridView.DataSource = dataTable;

//fill datatable
dataAdapter.Fill(dataTable);

【问题讨论】:

  • 你好马尔维娜,欢迎来到 StackOverflow。我们在准确查看这里发生的情况时遇到了一些问题,因为我们缺少一些信息(例如您使用的编程语言,以及您使用的数据库引擎和/或框架)。请帮助我们通过填写这些空白来帮助您。
  • 感谢您的回复。我正在使用 .Net 框架、C# 和 MS SQL Server 2005。
  • 错误是否发生在DateTime dtDateBegin = Convert.ToDateTime(sDateBegin); 上?如果是这样,这可以通过使用DateTime.Parse(string input) 来解决(见msdn.microsoft.com/en-us/library/1k1skd40.aspx)我还不能确定的原因是很难说出你提到的存储过程和gridview 控件在做什么;)
  • 感谢蒂莫西,这确实有效!谢谢一百万:)
  • 不客气。我添加了一个答案,应该澄清发生了什么:)

标签: c# gridview datatable dataadapter sqlparameter


【解决方案1】:

发生错误是因为Convert.ToDateTime 尝试执行从任何对象到日期时间的隐式转换。 来自控件的对象是一个字符串,但不能转换为 DateTime 对象。 它实际上是一个字符串表示的日期和时间。

构造DateTime对象的正确方法是用

解析字符串
DateTime.Parse(string input)

【讨论】:

    【解决方案2】:

    您已将 SqlParameter 定义为 Timestamp 数据类型(它是一个字节数组)而不是 DateTime。鉴于您代表的是日期范围,听起来您应该将参数数据类型更改为 DateTime。

    【讨论】:

    • +1。另一个没有阅读时间戳的含义的文档。我喜欢那个。这个问题非常适合高级人员的 inteviwes - 只是一个侧面问题,得到(错误答案),把简历放在它所属的地方 - 垃圾箱。时间戳数据类型与时间戳无关;)
    • 谢谢,不幸的是,我已经尝试过了,但没有任何区别,错误是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多