我正在使用PostgreSQL作为数据库。我有一个用
编写的应用程序我的数据库中有一个名为 tblAppt 的表,该表中有一个名为 appttime 的列,该列的数据类型为没有时区的时间 >
如果我运行以下查询,则在pgAdmin4的查询工具中:
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div" style="width: 500px; height: 250px;"></div>
结果是:
INSERT INTO tblAppt (appttime) VALUES ('00:30:00');
这意味着该记录已添加到我的表中,在图像中您可以看到我有一行:
现在,在Web应用程序中,我有一个名为 txtCustTime 的文本框,在该文本框中输入此值 00:30:00
当我按下提交按钮时,出现以下错误:
System.InvalidCastException
无法使用以下命令编写CLR类型的System.String 处理程序类型TimeHandler
以下是提交内容的摘要:
INSERT 0 1 Query returned successfully in 105 msec.
我的问题是我是否需要强制转换它,因为文本框中的值或使用其他数据类型或其他内容。
请注意: 该表中我还有其他列,它们不是时间或日期,所以可以提交。我的问题似乎专门针对此特定列类型。
其他说明:
如果我在提交时运行此值,则将值添加到数据库中:
string insertstmt = "INSERT INTO tblAppt(appttime) VALUES (@ApptTime)";
NpgsqlCommand cmd = new NpgsqlCommand (insertstmt, con);
cmd.Parameters.Add("@ApptTime", NpgsqlDbType.Time );
cmd.Parameters ["@ApptTime"].Value = txtCustTime.Text;
con.Open ();
cmd.ExecuteNonQuery ();
con.Close ();
告诉我我不明白的问题与参数有关。
答案 0 :(得分:1)
评论中的人是正确的,因为 TimeSpan 是必经之路。但是,有关如何使用它的文档并不十分清楚。
针对上述问题使用 TimeSpan 的正确方法是:
string insertstmt = "INSERT INTO tblAppt(appttime) VALUES
(@ApptTime)"; NpgsqlCommand cmd = new NpgsqlCommand (insertstmt, con);
TimeSpan thetime = TimeSpan.Parse(txtCustTime.Text);
cmd.Parameters.Add("@ApptTime", NpgsqlDbType.Time ); cmd.Parameters
["@ApptTime"].Value = thetime; con.Open (); cmd.ExecuteNonQuery ();
con.Close ();
我使用此链接作为参考: https://docs.microsoft.com/en-us/dotnet/api/system.timespan?redirectedfrom=MSDN&view=netframework-4.7.2