各位科技業的大神前輩好
最近本人在學習如何用 ASP.NET Core (MVC) C# 來開發網頁系統
但是在連線至公司端的Oracle 資料庫時,一直看到ORA-28040 The database does not accept your client's authentication protocol; login denied
這樣的一段錯誤
因此,我有嘗試裝不同的
Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.Core 版本,並且在Program.cs 中也有對應的程式碼等等
感覺上沒有太大的問題,畢竟有顯示The database does not accept your client's authentication protocol; login denied
後來爬文有看到要在Oracle底下的某一個文件加入這兩段
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
再來也有至Oracle 官方網站看到這一類的解答,提到的解法好像也是差不多這樣
但目前還是沒有辦法連線... 在 appsettings.json 文件連線的Url 應該也沒有太大的問題?
"ConnectionStrings": {
"OracleDbConnection": "User Id=myUsername;Password=myPassword;Data Source=myDataSource"
}
我是按照這樣的格式來寫
oracle 資料庫的版本是 11g
不知是否有大神知道如何解決這個連線的問題?
目前該試的真的都嘗試了......
20240808更新:
目前透過回答處,尼克大大的方法,經過小小的調整後可以連線公司的oracle資料庫,但另一個問題發生了...
只有寫死的SQL才能撈出資料...
例如:`string sql ="Select ID from table where name='小明'"
這樣子才可以...
如果我想要帶入自己的參數的話就不行...
例如:string sql ="Select ID from table where name=':p1'
然後 p1
的值一樣是小明
有考慮過是否有空白或編碼一些問題,因此也有透過 trim() 來調整
但目前還是沒撈出資料,重點是不僅沒有報錯,還顯示 0 筆資料...
直接把我搞迷糊了...
不知有沒有大神碰過類似的情況?
20240809更新:
結果是公司資料表的 name 這個的資料欄位的問題...
只要string sql ="Select ID from table where TRIM(name)=':p1'
就可以撈出資料了...
到Oracle這一頁下載11版專用的ODAC試看看,32和64位元要選對。
如果電腦已裝了其它版本的ODAC建議全部移除減少問題。