我正在写信给 StackOverflow,询问我在使用 ASP Core 和 C Sharp WinForm 时经常遇到的问题。我的数据库 Vertica 中的每个表都包含列。我工作的公司使用 Vertica 数据库。我使用 System.Data.Odbc。每次我执行保存请求时,我
有此消息:
System.Data.Odbc.OdbcException:'错误[42703]错误2624:列“用户名”不存在
例如,如果我有 3 列,如用户名、密码和站点,则将是用户名不存在。
如果我从 INSERT 中删除用户名,则会出现密码不存在等情况
我使用System.Data.Odbc。每次我执行保存请求时,都会收到此消息。
命令 read() 正在工作,我可以从数据库中检索数据。如果我执行 SELECT 查询,那就有效了。
这是代码:
任何人都不工作
简化测试代码:
public void Save(SwissportStateModel model)
{
OdbcConnection conn = _db.GetConnection();
string query = "Insert into flexautomatisation.tbl_swissport_test (Username) VALUES
(@Username)";
conn.Open();
OdbcCommand cmd = new OdbcCommand(query, conn);
cmd.Parameters.AddWithValue("@Username", "John");
cmd.ExecuteNonQuery();
conn.Close();
}
正常代码:
DateTime localDate = DateTime.Now;
string cmdstring = "Insert into flexautomatisation.tbl_swissport_state (Environment,
Schedule, IsLaunch, Created_at) VALUES (@Environment, @Schedule, @IsLaunch,
@Created_at)";
using (OdbcConnection conn = _db.GetConnection())
{
conn.Open();
using (OdbcCommand cmd = new OdbcCommand(cmdstring, conn))
{
cmd.Parameters.AddWithValue("@Environment", model.Environment);
cmd.Parameters.AddWithValue("@Schedule", model.Schedule);
cmd.Parameters.AddWithValue("@IsLaunch", model.IsLaunch);
cmd.Parameters.AddWithValue("@Created_at", localDate);
cmd.ExecuteNonQuery();
}
conn.Close();
}
谢谢您的帮助。
更新:
以下是表格定义。
对于表 1:
CREATE TABLE flexautomatisation.tbl_swissport_test ( Id IDENTITY ( 1 ) , Username varchar(255) NULL );
对于表 2:
CREATE TABLE flexautomatisation.tbl_swissport_state ( Id IDENTITY ( 1 ) , Environment int NOT NULL, Schedule int DEFAULT 5, IsLaunch boolean DEFAULT false, Created_at timestamp DEFAULT NULL::timestamp );
在永顺的帮助下,我找到了解决这个问题的方法。 实际上,我们需要使用这样的 VALUES:VALUES(?)
解决方案可以如下所示。
OdbcConnection conn = _db.GetConnection();
string query = "Insert into flexautomate.tbl_employee_test
(Username,Name,Age) VALUES (?,?,?)";
conn.Open();
OdbcCommand cmd = new OdbcCommand(query, conn);
cmd.Parameters.AddWithValue("@Username", "John");
cmd.Parameters.AddWithValue("@Name", "Doe");
cmd.Parameters.AddWithValue("@Age", 45);
cmd.ExecuteNonQuery();
conn.Close();
它有效。
谢谢您的帮助。