2017-10-06 121 views
0

我使用C#(3.2.4.1 Npgsql的)和PostgreSQL(9.6.5)和pgAdmin的3的PostgreSQL:42883操作符不存在:沒有時間戳時區

我的表是PostgreSQL的:

create table Data 
(          
    idref integer NOT NULL, 
    val text, 
    dt timestamp without time zone NOT NULL, 
    constraint PK_Data_idRef_Dt primary key (idRef, Dt), 
    constraint FK_Data_Ref foreign key(idRef) references Ref(Id)          
); 

當我運行功能(C#):

static void Main(string[] args) 
    { 
     var connString = "Server = 0.0.0.0; Port = 5432; Userid = user; Password = password; CommandTimeout=300; Timeout = 300; Database = database"; 
     using (var conn = new NpgsqlConnection(connString)) 
     { 
      NpgsqlCommand cmd = new NpgsqlCommand(@"select Val, Dt from Data where idRef = @Id and Dt >= @Dt and Dt <= @Dt order by Dt asc;", conn); 

      NpgsqlParameter parameterId = new NpgsqlParameter("Id", NpgsqlDbType.Integer); 
      parameterId.Value = 4; 
      cmd.Parameters.Add(parameterId); 

      NpgsqlParameter parameterDtBegin = new NpgsqlParameter("DtBegin", NpgsqlDbType.Timestamp); 
      parameterDtBegin.Value = new DateTime(2017, 9, 1, 0,0,0); 
      cmd.Parameters.Add(parameterDtBegin); 

      NpgsqlParameter parameterDtEnd = new NpgsqlParameter("DtEnd", NpgsqlDbType.Timestamp); 
      parameterDtEnd.Value = new DateTime(2017, 10, 1, 0, 0, 0); 
      cmd.Parameters.Add(parameterDtEnd); 

      conn.Open(); 

      using (var reader = cmd.ExecuteReader()) 
        while (reader.Read()) 
        Console.WriteLine(reader.GetString(0)); 
     } 
     Console.ReadKey(); 
    } 

我得到以下錯誤:。我看到文章(link),但這個想法對我沒有用。 謝謝你的回答!

回答

1

它幫助我:

NpgsqlCommand cmd = new NpgsqlCommand(@"select Val, Dt from Data where idRef = :id and Dt >= :date and Dt <= :date2 order by Dt asc;", conn); 

cmd.Parameters.Add(":id", NpgsqlDbType.Integer).Value = 3; 
cmd.Parameters.Add(":date", NpgsqlDbType.Timestamp).Value = new DateTime(2017, 9, 1, 0, 0, 0); 
cmd.Parameters.Add(":date2", NpgsqlDbType.Timestamp).Value = new DateTime(2017, 10, 7, 0, 0, 0); 

conn.Open(); 

using (var reader = cmd.ExecuteReader()) 
    while (reader.Read()) 
     Console.WriteLine(reader.GetString(0)); 
相關問題