应该使用什么 NpgsqlDbType 来清除 "Can't write CLR type" 错误

What NpgsqlDbType should be used to clear "Can't write CLR type" error

我正在使用 PostgreSQL 作为我的数据库。我有一个用

编写的应用程序

我的数据库中有 table 名为 tblAppt,因为 table 我有一个名为 appttime[=59= 的列] 该列的数据类型是 time without time zone

在 pgAdmin4 的 查询工具中 如果我 运行 以下查询:

INSERT INTO tblAppt (appttime) VALUES ('00:30:00');

结果是:

INSERT 0 1 Query returned successfully in 105 msec.

这意味着记录被添加到我的table,在图像中你可以看到我有一行:

现在在我的网络应用程序中,我有一个名为 txtCustTime 的文本框,在该文本框中我输入了这个值 00:30:00

当我按下提交按钮时,出现以下错误:

System.InvalidCastException
Can't write CLR type System.String with handler type TimeHandler

以下是提交时发生的事情的片段:

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 ();

我的问题是我是否需要转换它,因为文本框中的值或使用不同的数据类型,或其他原因。

请注意: 我在那个 table 中还有其他列,这些列不是时间或日期,他们可以提交。我的问题似乎专门针对这种特定的列类型。
补充说明: 如果我 运行 在提交时将值添加到数据库中:

string insertstmt = "INSERT INTO tblAppt(appttime) VALUES ('00:30:00')";
NpgsqlCommand cmd = new NpgsqlCommand (insertstmt, con);
con.Open ();
cmd.ExecuteNonQuery (); 
con.Close ();

这告诉我我不理解的问题与参数有关。

评论中的人是正确的,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 ();

我用这个link作为参考: https://docs.microsoft.com/en-us/dotnet/api/system.timespan?redirectedfrom=MSDN&view=netframework-4.7.2