2011-04-23 41 views
5

Tôi đang sử dụng Oracle.DataAccess.Client để làm việc với cơ sở dữ liệu Oracle trong ứng dụng ASP.Net của mình. Không có tài liệu trợ giúp nào trong MSDN cho Tài liệu ODP.NetTài liệu Oracle thực sự rất tệ. Tôi không thể tìm ra câu trả lời cho câu hỏi đơn giản này.Cách thực hiện câu lệnh cập nhật bằng Oracle ODP.Net trong C#

Không thể thực thi câu lệnh cập nhật đơn giản mà không phải tạo đối tượng dataset và cập nhật dataset?

Cách thực hiện báo cáo cập nhật bằng cách sử dụng Oracle ODP.Net trong C#?

+1

ODP.Net thực hiện IDbCommand, IDbConnection và IDbDataAdapter tại sao bạn không thể sử dụng chúng để chuẩn bị và thực thi báo cáo Cập nhật. – adt

Trả lời

15

Tôi sẽ cần phải kiểm tra cú pháp chính xác, nhưng đây là một số mã nhanh chóng ra khỏi đỉnh đầu của tôi

using (OracleConnection con = new OracleConnection(...)) 
{ 
    con.Open(); 
    OracleCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "update table set col1 = :param1, col2 = :param2 where key = :keyValue"; 
    cmd.Parameters.AddWithValue("param1", 1); 
    cmd.Parameters.AddWithValue("param2", "Text data"); 
    cmd.Parameters.AddWithValue("keyValue", "1"); 
    cmd.ExecuteNonQuery(); 
} 

Trên đây tạo một đối tượng lệnh đặt lệnh lên để thực hiện một Cập nhật câu lệnh SQL, trong ví dụ này tôi cho thấy một cách để thiết lập một truy vấn được tham số hóa, bạn nên luôn luôn đi với một truy vấn được tham số hóa. Khi lệnh được thiết lập, bạn chỉ cần gọi ExecuteNonQuery để thực thi lệnh.

+1

Ngọt ngào! Cảm ơn bạn! Mặc dù tôi không thể tìm thấy "AddWithValue". ExecuteNonQuery là chìa khóa, tôi đã thử nó với một truy vấn được tham số hóa và nó hoạt động. Tôi nghĩ tôi có thể ứng biến nó từ đây. Thực sự đánh giá cao thời gian của bạn !! –

+0

Karthik, lợi thế của việc sử dụng truy vấn được tham số hóa là nó thực hiện tất cả bảo vệ tiêm SQL cho bạn. – SurfingSanta

+0

Heya! Tôi chỉ thay đổi một vài điều để thêm điều khiển giao dịch cho phép Oracle thực hiện các lệnh cập nhật: 'code' OracleCommand cmd = con.CreateCommand(); OracleTransaction oratrans = con.BeginTransaction (IsolationLevel.ReadCommitted); cmd.Transaction = oratrans; . . . cmd.ExecuteNonQuery(); oratrans.Commit(); Yours, –

0

Ngoài câu trả lời của @ Chris, đây là trang tài liệu của lớp OracleParameter có mã mẫu sử dụng OracleCommand để thực thi Update s.

EDIT: Đây là điểm vào cho ODP.net documentation.

+1

Liên kết tới mã mẫu bạn cung cấp là nói về cách tìm nạp dữ liệu bằng OracleDataReader chứ không phải cách cập nhật dữ liệu (theo câu hỏi ban đầu của tôi). Tôi đã đi qua các tài liệu ODP.net và tôi không thể tìm thấy một mẫu mã tương tự để cập nhật. Tôi muốn MSDN có tài liệu này: ( –

1

Vì vậy, sau một chút thời gian và làm việc này một lúc, tôi thấy rằng phương pháp tôi sử dụng để thêm một tham số mới vào lệnh kết nối như sau. Tôi không tìm thấy phương pháp như được nêu trong bài trước. Tâm trí bạn tôi đang sử dụng một đối tượng truy vấn mà tôi đang đi qua các giá trị xung quanh với.

public Boolean InsertMethod(Query _query) 
    { 
     var success = false; 
     var queryString = string.Format(@"INSERT INTO TABLE(ID, OWNER, TEXT) VALUES (TABLE_SEQ.NEXTVAL,:OWNER, :TEXT)"); 
     try 
     { 
      using (OracleConnection con = new OracleConnection(ConString)) 
      { 
       con.Open(); 
       OracleCommand cmd = con.CreateCommand(); 
       cmd.CommandText = queryString; 
       cmd.Parameters.Add("OWNER", _query.Owner); 
       cmd.Parameters.Add("TEXT", _query.Text);   

       int rowsUpdated = cmd.ExecuteNonQuery(); 

       if (rowsUpdated > 0) success = true; 
      } 

      return success; 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex); 
      throw; 
     } 
    } 
+0

Hình như bạn đang chèn hai lần.hai 'cmd.ExecuteNonQuery();' – Halter

+1

Bạn đã chính xác. – nshouppuohsn

Các vấn đề liên quan