Tôi đang cố gắng để thực hiện một truy vấn SQL chống lại một cơ sở dữ liệu MS Access chứa một "REPLACE" chức năng:ngoại lệ khi cố gắng thực hiện "REPLACE" chống lại MS Access
UPDATE MyTable
SET MyColumn = REPLACE(MyColumn, 'MyOldSubstring', 'MyNewSubstring')
WHERE Id = 10;
Nếu tôi chạy truy vấn này từ bên trong MS Truy cập (ứng dụng) nó hoạt động tốt. Nhưng khi tôi cố gắng chạy nó từ ứng dụng của tôi, một ngoại lệ được ném ra.
Trường hợp ngoại lệ:
System.Data.OleDb.OleDbException was unhandled
Message="Undefined function 'REPLACE' in expression."
Source="Microsoft Office Access Database Engine"
ErrorCode=-2147217900
StackTrace:
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
...
Tại sao tôi nhận ngoại lệ này? Thông tin
thêm:
- Ứng dụng của tôi là một ứng dụng WPF
- Tôi đang sử dụng .NET 3.5
- tôi chạy MS Access 2007
- connectionstring của tôi là "Provider = Microsoft.ACE .OLEDB.12.0; Nguồn dữ liệu = C: \ MyFolder \ MyDatabase.accdb "
Mã truy cập cơ sở dữ liệu của tôi trông giống như thế này, nơi tôi sẽ chỉ cần vượt qua trong SQL đề cập như là một chuỗi:
public void ExecuteNonQuery(string sql)
{
OleDbCommand command = new OleDbCommand(sql);
OleDbConnection connection = new OleDbConnection(ConnectionString);
command.Connection = connection;
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
connection.Close();
}
}
(Một số mã như lỗi xử lý loại bỏ cho ngắn gọn. Quan sát rằng tôi chỉ xây dựng một nguyên mẫu nhanh chóng vì vậy mã hệ thống ống nước này sẽ không bao giờ được sử dụng cho thực tế, vì vậy hãy chịu đựng với nó. ;) Tôi vẫn cần điều này để làm việc mặc dù ...)
Giải pháp thay thế?
Nếu không thể lấy REPLACE hoạt động, có thể bạn biết một số giải pháp thay thế? Tôi có thể lấy tất cả các hàng tôi muốn cập nhật, làm chuỗi này thay thế trong mã và sau đó cập nhật các hàng trong cơ sở dữ liệu. Nhưng đó có thể là rất nhiều truy vấn SQL (một để tìm nạp và một cho mỗi hàng để cập nhật) và sẽ không phải là một giải pháp rất thanh lịch ...
Đó là câu trả lời hay nhưng không giải quyết được câu hỏi áp phích. –
Tôi không có giải pháp (tôi không bao giờ làm việc bên ngoài Access!), Nhưng tôi hy vọng rằng việc chỉ ra điều này có thể dẫn đến câu trả lời từ người có thể giúp đỡ, có lẽ ai đó sẵn sàng tấn công với biểu hiện xấu xí sử dụng InStr() và Len() để thực hiện công việc. –
"có lẽ ai đó sẵn sàng cùng nhau tấn công biểu hiện xấu xí" - xong! ;) – onedaywhen