Tôi đang sử dụng System.Data.OracleClient
mà không tham số ràng buộc theo tên và vị xác nhận rằng CommandText và thông số được đồng bộ:ORA-01.008 với tất cả các biến ràng buộc
public string CommandText { get; set; }
public IEnumerable<OracleParameter> Parameters { get; set; }
private void VerifyThatAllParametersAreBound()
{
var variableNames = Regex.Matches(CommandText, ":\\w+")
.Cast<Match>().Select(m => m.Value).ToArray();
var parameteterNames = Parameters.Select(p => p.ParameterName).ToArray();
var unboundVariables = variableNames.Except(parameteterNames).ToArray();
if (unboundVariables.Length > 0)
{
throw new Exception("Variable in CommandText missing parameter: "
+ string.Join(", ", unboundVariables) + ".");
}
var unboundParameters = parameteterNames.Except(variableNames).ToArray();
if (unboundParameters.Length > 0)
{
throw new Exception("Parameter that is not used in CommandText: "
+ string.Join(", ", unboundParameters) + ".");
}
}
Tuy nhiên một truy vấn ném ORA-01008: not all variables bound
. Khi chèn thủ công các tham số-giá trị vào CommandText vi phạm, truy vấn sẽ chạy, vì vậy các CommandText và Parameters-values phải là ok. Tôi đang sử dụng: làm tiền tố cho cả các biến và tên tham số và nó hoạt động cho các truy vấn khác.
Làm cách nào để xác định nguyên nhân của ngoại lệ này?
bạn có mã tạo truy vấn không? Ngoài ra, bạn đã thử với oracle (hoặc các nhà cung cấp khác) .net clients? Tôi nghĩ rằng Microsoft không còn cung cấp cho khách hàng oracle. –
Tôi mơ hồ nhớ một vấn đề với một trong những khách hàng Oracle rằng các tham số phải được ràng buộc theo đúng thứ tự mà chúng xuất hiện trong truy vấn hoặc nó sẽ không hoạt động - đó có phải là vấn đề ở đây không? – Rup
@Nick - Lệnh này là bản cập nhật với ~ 40 thông số để dễ đọc và lý do ip tôi đã bỏ chúng. Tôi đã thử với ODT.NET từ Oracle nhưng đã gặp sự cố khi triển khai nó. (Xem thêm bình luận bên dưới.) – Grastveit