正試圖使用參數化查詢來查詢AS400數據庫。這是我的代碼:使用Oledb命令構建查詢以查詢AS400數據庫
string connectionString = ConfigurationManager.ConnectionStrings["****"].ConnectionString;
using (OleDbConnection con = new OleDbConnection(connectionString))
using (OleDbCommand command = con.CreateCommand())
{
string sqlStr = @"SELECT CASE IsBatch WHEN 'Y' THEN 1 ELSE 0 END
FROM Batch200
WHERE BatchID=LEFT(?,4) AND BatchNumber=CAST(RIGHT(?,9)AS INT)";
command.CommandType = CommandType.Text;
command.CommandText = str;
command.Parameters.Add(new OleDbParameter("@p1", polNumber));
var option = command.ExecuteScalar();
}
我試過兩個查詢,他們都沒有工作。如何解決這個問題?
正在此錯誤消息:
SQL5016:合格對象名稱****無效。
原因。 。 。 。 。 :發生以下某種情況:
- 用於限定對象名稱的語法對指定的命名選項無效。使用系統命名,對象名稱的限定格式是模式名稱/對象名稱。使用SQL命名對象名稱的限定格式爲authorization-name.object-name。
- 不允許使用用於限定對象名稱的語法。用戶定義的類型不能使用SQL過程或函數的參數和SQL變量的系統命名約定中的模式進行限定。
恢復。 。 。 :執行以下操作之一併再次嘗試請求:
- 如果要使用SQL命名約定,請在適當的SQL命令中驗證SQL命名選項,並以authorization-id形式限定對象名稱。對象的名字。
- 如果要使用系統命名約定,請在相應的SQL命令中指定系統命名選項,並以schema-name/object-name格式限定對象名稱。
- 使用系統命名約定,確保可以在當前路徑中找到爲SQL例程中的參數和變量指定的用戶定義類型。
你是什麼意思,爲什麼說做「不工作」? – abatishchev
將連接字符串存儲在.Config文件中,然後使用(OleDbCommand命令=新的OleDbCommand(sqlStr,con))將該連接字符串更改爲 '使用(OleDbCommand command = con.CreateCommand())'到 ''也查找您的'CASE WHEN'的語法,如果語法相同(例如在Sql Server中),您應該將'END作爲IsBatch' – MethodMan
@abatishchev添加了異常 – PRK