API網站架上去後出現
定義了重複的 'oracle.manageddataaccess.client' 區段
根據黑暗執行序大的文章
http://blog.darkthread.net/post-2016-09-10-managed-odp-net-configsection-issue.aspx
了解原來預設是啟用32位元模式,且一查系統的machine.config,的確已定義過oracle.manageddataaccess.client,
然後64位元的machine.config也的確沒有定義,
但該伺服有別的站台在跑,不想動到系統的machine.config
可是又不想砍掉專案的config並改用環境變數,因為需要裡面一段custom colum type mapping設定,
所以反過來,把集區中啟用32位元模式取消,讓站台用64位元模式執行就OK了
2017年11月16日 星期四
2017年7月13日 星期四
Oracle SQL Developer 使用者設定路徑&顏色設定路徑 | Oracle SQL Developer user setting path & color theme setting path
from
https://stackoverflow.com/questions/7954759/where-does-oracle-sql-developer-store-connections
connection string path
\Users\[user]\AppData\Roaming\SQL Developer\system3.2.20.09.87\o.jdeveloper.db.connection.{version number}\connections.xml
----------
https://stackoverflow.com/questions/7954759/where-does-oracle-sql-developer-store-connections
connection string path
\Users\[user]\AppData\Roaming\SQL Developer\system3.2.20.09.87\o.jdeveloper.db.connection.{version number}\connections.xml
custome color theme setting path
\Users\[user]\AppData\Roaming\SQL Developer\system3.2.20.09.87\o.sqldeveloper.{version number}\product-preferences.xml
find below xml section:
<hash n="SyntaxColorsOptions">
┌ <value n="selectedScheme" v="{your serring name}"/>
│ <list n="styleList">
│ (copy all this section to your new setting file)
└ </list>
2016年10月11日 星期二
c# oracle 撈不出資料 但developer撈有資料 | c# oracle can't get data but data can get when query on developer
環境:
VS2013& 類別庫專案 & C# & Oracle.DataAccess 4.121.1.0
情況:
在oracle developer跑一段select 有幾個變數
select blablabla from table where A=:A and B=:B and C=:C
執行結果有資料
但在C#用OracleDataReader撈到DataTable
dt.Load(odr)
撈出來卻沒資料
印出變數跟sql有正確,也沒有跳exception,
查DB的query log也沒看到有執行這段查詢....
解決:
後來發現是變數塞值的時候順序塞錯了
我寫的是
Parameters.Add("A",A)
Parameters.Add("C",C)
Parameters.Add("B",B)
但應該要照順序去塞入
Parameters.Add("A",A)
Parameters.Add("B",B)
Parameters.Add("C",C)
才可以正常的綁定變數
VS2013& 類別庫專案 & C# & Oracle.DataAccess 4.121.1.0
情況:
在oracle developer跑一段select 有幾個變數
select blablabla from table where A=:A and B=:B and C=:C
執行結果有資料
但在C#用OracleDataReader撈到DataTable
dt.Load(odr)
撈出來卻沒資料
印出變數跟sql有正確,也沒有跳exception,
查DB的query log也沒看到有執行這段查詢....
解決:
後來發現是變數塞值的時候順序塞錯了
我寫的是
Parameters.Add("A",A)
Parameters.Add("C",C)
Parameters.Add("B",B)
但應該要照順序去塞入
Parameters.Add("A",A)
Parameters.Add("B",B)
Parameters.Add("C",C)
才可以正常的綁定變數
標籤:
C#,
DataTable,
Oracle,
Oracle.DataAccess
2016年9月1日 星期四
C# 從Oracle db取多個DataTable結果回來 | C# get multi DataTable result from Oracle DB
參考文章:
http://stackoverflow.com/questions/6149836/filling-multiple-datatables-with-1-oraclecommand
簡單來說就是在db上用 SYS_REFCURSOR 輸出結果
用 open cursor for select的方式就可以把結果丟回來
C#端的程式寫法大致上同CALL SP的方式,
參數設定中輸出的資料集是用OracleDbType.RefCursor這個型別
http://stackoverflow.com/questions/6149836/filling-multiple-datatables-with-1-oraclecommand
簡單來說就是在db上用 SYS_REFCURSOR 輸出結果
用 open cursor for select的方式就可以把結果丟回來
C#端的程式寫法大致上同CALL SP的方式,
參數設定中輸出的資料集是用OracleDbType.RefCursor這個型別
2016年8月9日 星期二
c# 呼叫oracle sp 出現ora-06502 pl/sql 數字或值錯誤 character string buffer too small | c# call oracle sp get ora-06502
寫sp時遇到ora-06502 pl/sql 數字或值錯誤 character string buffer too small
出錯行數是在我的sp的設定輸出參數文字字串訊息那一行
查了一下後發現是c#端在設定輸出參數時要順便指定大小在第三個參數
oc.Parameters.Add("P_MSG", OracleDbType.NVarchar2, 256).Direction=ParameterDirection.Output;
不然預設的buffer好像很小,多塞幾個字就over了
出錯行數是在我的sp的設定輸出參數文字字串訊息那一行
查了一下後發現是c#端在設定輸出參數時要順便指定大小在第三個參數
oc.Parameters.Add("P_MSG", OracleDbType.NVarchar2, 256).Direction=ParameterDirection.Output;
不然預設的buffer好像很小,多塞幾個字就over了
2016年7月22日 星期五
C# 寫入Oracle 加入變數時出現ArgumentOutOfRangeException | C# insert Oracle db get ArgumentOutOfRangeException when add parameter
語言:C#
DLL:Oracle.DataAccess.Client; 4.121.1.0
在做新增資料時,插入一個常數整數變數,就出錯在那一行
private const int _DEFAULT_VALUE = 0;
OracleCommand oc = new OracleCommand();
oc.CommandText = "insert into Table1 (col1) values(:val1)";
oc.Parameters.Add("val1", _DEFAULT_VALUE);--這行出錯
得到ArgumentOutOfRangeException
Google找到一篇文章
http://brianseekford.com/wordpress/?p=100
說在插入0的時候也出錯了
有個解決辦法是這樣
oc.Parameters.Add("val1", (object)_DEFAULT_VALUE);
把變數轉型為object,結果就過了!
我想應該是驅動程式的BUG
20170510補記
自己又遇到同樣問題 狗回來這一篇
不過有新解法
oc.Parameters.Add(new OracleParameter(){
ParameterName=":FLAG",
Value=(short)0,
OracleDbType=OracleDbType.Int16
});
這樣的方式也是OK
DLL:Oracle.DataAccess.Client; 4.121.1.0
在做新增資料時,插入一個常數整數變數,就出錯在那一行
private const int _DEFAULT_VALUE = 0;
OracleCommand oc = new OracleCommand();
oc.CommandText = "insert into Table1 (col1) values(:val1)";
oc.Parameters.Add("val1", _DEFAULT_VALUE);--這行出錯
得到ArgumentOutOfRangeException
Google找到一篇文章
http://brianseekford.com/wordpress/?p=100
說在插入0的時候也出錯了
有個解決辦法是這樣
oc.Parameters.Add("val1", (object)_DEFAULT_VALUE);
把變數轉型為object,結果就過了!
我想應該是驅動程式的BUG
20170510補記
自己又遇到同樣問題 狗回來這一篇
不過有新解法
oc.Parameters.Add(new OracleParameter(){
ParameterName=":FLAG",
Value=(short)0,
OracleDbType=OracleDbType.Int16
});
這樣的方式也是OK
2016年4月14日 星期四
Oracle 中文數字排序 | Oracle order by chinese number
我在處理地址的中文排序
例如一街二街三街....
oracle預設的中文排序好像是照拼音
所以會發生二街(ㄦˋ)比三街(ㄙㄢ)後面的問題
若指定用筆劃排序
又會發現五街(四劃)比四街(五劃)前面的問題
後來問到一個語法叫TRANSLATE
ORDER BY translate(road,'一二三四五六七八九','123456789');
參考:
http://www.cnblogs.com/huli-DBA/archive/2012/02/13/2348824.html
可以把指定的字元集中的字元一對一替換為替換字元集中的字元
所以就拿來處理中文的一到九
至於一個字的十不能換成10,其實也還好
例如 十四 十五 十六 會變成 十4 十5 十6
二十三 二十四 二十五 會變成 2十3 2十4 2十5
這樣排下去也還算是照著順序
例如一街二街三街....
oracle預設的中文排序好像是照拼音
所以會發生二街(ㄦˋ)比三街(ㄙㄢ)後面的問題
若指定用筆劃排序
又會發現五街(四劃)比四街(五劃)前面的問題
後來問到一個語法叫TRANSLATE
ORDER BY translate(road,'一二三四五六七八九','123456789');
參考:
http://www.cnblogs.com/huli-DBA/archive/2012/02/13/2348824.html
可以把指定的字元集中的字元一對一替換為替換字元集中的字元
所以就拿來處理中文的一到九
至於一個字的十不能換成10,其實也還好
例如 十四 十五 十六 會變成 十4 十5 十6
二十三 二十四 二十五 會變成 2十3 2十4 2十5
這樣排下去也還算是照著順序
2016年3月9日 星期三
C# Oracle Client 執行多行SQL回傳影響列數為-1 | C# Oracle Client execute multiple line sql number of rows affected return -1
問題:
當執行多行ORACLE SQL、如BEGIN ...END,或者MERGE INTO等指令時會,
ExecuteNonQuery()都只會回傳-1,這樣就無法看出影響列數
解決方法參考
http://stackoverflow.com/questions/32138843/merge-query-returns-1-instead-of-number-of-rows-merged
原本的SQL加上一段
-----------
寫成int回傳方法時
舊的System.Data.OracleClient裡面我這樣寫轉換:
count = (int)p.Value;
是可以跑的,但在新的Oracle.DataAccess.Client裡面
我要這樣轉換
(參考: http://stackoverflow.com/questions/3026036/convert-oracleparameter-value-to-int32 )
當執行多行ORACLE SQL、如BEGIN ...END,或者MERGE INTO等指令時會,
ExecuteNonQuery()都只會回傳-1,這樣就無法看出影響列數
解決方法參考
http://stackoverflow.com/questions/32138843/merge-query-returns-1-instead-of-number-of-rows-merged
原本的SQL加上一段
:num := sql%rowcount;
且增加一個OUTPUT變數OracleCommand cmd = new OracleCommand(sql, myConnection);
var p = cmd.Parameters.Add(":num", OracleDbType.Int32, ParameterDirection.Output);
cmd.ExecuteNonQuery();
Console.WriteLine("Rows affected: " + p.Value);
執行之後讀取變數的值即可得到影響列數-----------
寫成int回傳方法時
舊的System.Data.OracleClient裡面我這樣寫轉換:
count = (int)p.Value;
是可以跑的,但在新的Oracle.DataAccess.Client裡面
我要這樣轉換
(參考: http://stackoverflow.com/questions/3026036/convert-oracleparameter-value-to-int32 )
Convert.ToInt32((decimal)(OracleDecimal)(cmd.Parameters["successCount"].Value))
轉換時才不會出現InvalidCastException
標籤:
C#,
merge into,
multiple line sql,
Oracle
2016年2月26日 星期五
ORA-01722 invalid number
今天在處理一個卡號欄位,原本是6位數字卡號,
現在新需求是把卡號的主檔裡一些欄位資訊帶出來,
所以理所當然就做一個JOIN就結束,
同時也做了另外幾個相同功能裡面的新需求,
本機+測試DB上跑也正常,
但到了本機+正式機DB測試後卻跳了ORA-01722 invalid number錯誤,
兜了快20分鐘,甚至找歪方向,發現拿掉
ROW_NUMBER() OVER( ORDER BY MY_DATE DESC )
這個行號欄位後就能跑,但實際上問題不在這裡,整個誤導思路...
後來才想通,有新需求才有新BUG,檢視新加的TABLE才想起來,
因為這個卡號欄位後來又塞了不是數字的值,
所以JOIN時文字對上數字,就發生ORA-01722錯誤,
解決辦法就是把主檔TABLE的數字ID轉文字,JOIN就成功了...
不過如果一次只處理一個需求,找問題發生點時或許就可以明確指出是這個TABLE了
現在新需求是把卡號的主檔裡一些欄位資訊帶出來,
所以理所當然就做一個JOIN就結束,
同時也做了另外幾個相同功能裡面的新需求,
本機+測試DB上跑也正常,
但到了本機+正式機DB測試後卻跳了ORA-01722 invalid number錯誤,
兜了快20分鐘,甚至找歪方向,發現拿掉
ROW_NUMBER() OVER( ORDER BY MY_DATE DESC )
這個行號欄位後就能跑,但實際上問題不在這裡,整個誤導思路...
後來才想通,有新需求才有新BUG,檢視新加的TABLE才想起來,
因為這個卡號欄位後來又塞了不是數字的值,
所以JOIN時文字對上數字,就發生ORA-01722錯誤,
解決辦法就是把主檔TABLE的數字ID轉文字,JOIN就成功了...
不過如果一次只處理一個需求,找問題發生點時或許就可以明確指出是這個TABLE了
2015年10月2日 星期五
ORA-12704 字元設定不符合
我在做小計總計報表
用了group by rollup來做群組,還有grouping(欄位名稱)來判斷小計行跟總計行
因為小計跟總計行的時候被群組的欄位會留白,要塞一些字進去
就用了case when grouping.... then '這是小計'的判斷
然後就跳錯ORA-12704
查很多網頁都說字串引號前面加一個N來轉型
但是很討厭的是加上去後,那個字串後developer裡面的sql全部都會變成字串顏色
解決方法就是把這個字串轉型就好了
cast('總計' as nvarchar2(20))
用了group by rollup來做群組,還有grouping(欄位名稱)來判斷小計行跟總計行
因為小計跟總計行的時候被群組的欄位會留白,要塞一些字進去
就用了case when grouping.... then '這是小計'的判斷
然後就跳錯ORA-12704
查很多網頁都說字串引號前面加一個N來轉型
但是很討厭的是加上去後,那個字串後developer裡面的sql全部都會變成字串顏色
解決方法就是把這個字串轉型就好了
cast('總計' as nvarchar2(20))
標籤:
group by rollup,
grouping,
ORA-12704,
Oracle
2015年7月23日 星期四
在MVC 實體資料模型Entity Framework Model加入Oracle 無PK的View的方法
markdown
我有個功能,主要參照的TABLE因為一些問題而沒有設定PK,但是又想用MVC EF來開發,
於是我照著MVC課程的做法,建了一個VIEW,裡面包了一個虛擬的PK值,
Oracle View做法: ``` select ROWNUM as ID,table1.* from table1 ```
結果跳ERROR2003錯誤,EF無法辨認哪個是PK,
我在虛擬ID的欄位使用了nvl(null,1) as ID、nvl(ROWNUM,1) as ID, ROWNUM as ID、
都還是一樣跳ERROR 2003,
後來有人建議我手動去編輯EDMX的XML,就編修了半天,終於成功帶出資料了
基本上就是複製其他的格式來用
EDMX有三大區塊
1.SSDL content 資料庫的TABLE
2.CSDL content 模型的TABLE
3.C-S mapping content 對照用的區塊
原本正常加入的模型,系統會自動產生這三大區塊的XML碼,
但是現在這個出錯的模型在xml只有加入SSDL區,而且還被註解
``` <!--錯誤 6013: 資料表/檢視 '' 未定義主索引鍵,也無法推斷有效的主索引鍵。此資料表/檢視已被排除。如果要使用此實體,您必須檢閱您的結構描述,加入正確的索引鍵,並將它取消註解。 <EntityType Name="my_view"> <Property Name="ID" Type="number" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="nvarchar2" MaxLength="11" /> <Property Name="CORRECT_ORDER" Type="number" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="nvarchar2" MaxLength="8" /> <Property Name="EM_ID" Type="nvarchar2" MaxLength="4" /> <Property Name="CM_ID" Type="nvarchar2" MaxLength="8" /> <Property Name="COST" Type="number" Precision="38" Scale="0" /> </EntityType>--> ```
現在把註解移除,加上KEY值
``` <EntityType Name="my_view"> <Key> <PropertyRef Name="ID" /> </Key> <Property Name="ID" Type="number" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="nvarchar2" MaxLength="11" /> <Property Name="CORRECT_ORDER" Type="number" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="nvarchar2" MaxLength="8" /> <Property Name="EM_ID" Type="nvarchar2" MaxLength="4" /> <Property Name="CM_ID" Type="nvarchar2" MaxLength="8" /> <Property Name="COST" Type="number" Precision="38" Scale="0" /> </EntityType> ```
EntityType 加上去後,要去SSDL區最後一塊EntityContainer裡面加上一行
``` <EntityContainer Name="ModelStoreContainer"> <EntitySet Name="table1" EntityType="Self.table1" Schema="myDB" store:Type="Tables" /> <EntitySet Name="table2" EntityType="Self.table2" Schema="myDB" store:Type="Tables" /> <EntitySet Name="table3" EntityType="Self.table3" Schema="myDB" store:Type="Tables" /> <!--這行--> <EntitySet Name="my_view" EntityType="Self.my_view" Schema="myDB" store:Type="Tables" /> </EntityContainer> ```
再來是CSDL的部分,這區系統就完全沒有產生XML了,同樣要填入EntityType 與EntityContainer,
但要注意的是這區的欄位Type是C#的型態,
例如number就是Decimal,nvarchar2就是String,
如果是String欄位,好像還要加上 FixedLength="true/false" Unicode="true/false"屬性
把前面SSDL的架構複製貼上到這區,並且修改TYPE為C#型態
``` <EntityType Name="my_view"> <Key> <PropertyRef Name="ID" /> </Key> <Property Name="ID" Type="Decimal" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="String" MaxLength="11" FixedLength="false" Unicode="true" /> <Property Name="CORRECT_ORDER" Type="Decimal" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="String" MaxLength="8" FixedLength="false" Unicode="true"/> <Property Name="EM_ID" Type="String" MaxLength="4" FixedLength="false" Unicode="true" /> <Property Name="CM_ID" Type="String" MaxLength="8" FixedLength="false" Unicode="true"/> <Property Name="COST" Type="Decimal" Precision="38" Scale="0" /> </EntityType> ```
再來同樣在EntityContainer加上一行
``` <EntityContainer Name="myDBEntities" annotation:LazyLoadingEnabled="true"> <EntitySet Name="table1" EntityType="Self.AS400_ZDF201" /> <EntitySet Name="table2" EntityType="Self.AS400_ZDF203" /> <EntitySet Name="table3" EntityType="Self.AS400_ZDF25A" /> <!--這行--> <EntitySet Name="my_view" EntityType="Self.my_view" /> </EntityContainer> ```
最後是CS-SS對應區,加上這個view的EntitySetMapping
``` <EntitySetMapping Name="my_view"> <EntityTypeMapping TypeName="Model.my_view"> <MappingFragment StoreEntitySet="my_view"> <ScalarProperty Name="ID" ColumnName="ID" /> <ScalarProperty Name="ORDER_NUMBER" ColumnName="ORDER_NUMBER" /> <ScalarProperty Name="CORRECT_ORDER" ColumnName="CORRECT_ORDER" /> <ScalarProperty Name="SEND_DATE" ColumnName="SEND_DATE" /> <ScalarProperty Name="EM_ID" ColumnName="EM_ID" /> <ScalarProperty Name="CM_ID" ColumnName="CM_ID" /> <ScalarProperty Name="COST" ColumnName="COST" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> ```
然後F6編譯,雖然還是會出現ERROR2003,但是建立Controller之後我已經可以撈出資料了!
不過不知道這樣手動增加,之後還會跑出什麼問題...
我有個功能,主要參照的TABLE因為一些問題而沒有設定PK,但是又想用MVC EF來開發,
於是我照著MVC課程的做法,建了一個VIEW,裡面包了一個虛擬的PK值,
Oracle View做法: ``` select ROWNUM as ID,table1.* from table1 ```
結果跳ERROR2003錯誤,EF無法辨認哪個是PK,
我在虛擬ID的欄位使用了nvl(null,1) as ID、nvl(ROWNUM,1) as ID, ROWNUM as ID、
都還是一樣跳ERROR 2003,
後來有人建議我手動去編輯EDMX的XML,就編修了半天,終於成功帶出資料了
基本上就是複製其他的格式來用
EDMX有三大區塊
1.SSDL content 資料庫的TABLE
2.CSDL content 模型的TABLE
3.C-S mapping content 對照用的區塊
原本正常加入的模型,系統會自動產生這三大區塊的XML碼,
但是現在這個出錯的模型在xml只有加入SSDL區,而且還被註解
``` <!--錯誤 6013: 資料表/檢視 '' 未定義主索引鍵,也無法推斷有效的主索引鍵。此資料表/檢視已被排除。如果要使用此實體,您必須檢閱您的結構描述,加入正確的索引鍵,並將它取消註解。 <EntityType Name="my_view"> <Property Name="ID" Type="number" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="nvarchar2" MaxLength="11" /> <Property Name="CORRECT_ORDER" Type="number" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="nvarchar2" MaxLength="8" /> <Property Name="EM_ID" Type="nvarchar2" MaxLength="4" /> <Property Name="CM_ID" Type="nvarchar2" MaxLength="8" /> <Property Name="COST" Type="number" Precision="38" Scale="0" /> </EntityType>--> ```
現在把註解移除,加上KEY值
``` <EntityType Name="my_view"> <Key> <PropertyRef Name="ID" /> </Key> <Property Name="ID" Type="number" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="nvarchar2" MaxLength="11" /> <Property Name="CORRECT_ORDER" Type="number" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="nvarchar2" MaxLength="8" /> <Property Name="EM_ID" Type="nvarchar2" MaxLength="4" /> <Property Name="CM_ID" Type="nvarchar2" MaxLength="8" /> <Property Name="COST" Type="number" Precision="38" Scale="0" /> </EntityType> ```
EntityType 加上去後,要去SSDL區最後一塊EntityContainer裡面加上一行
``` <EntityContainer Name="ModelStoreContainer"> <EntitySet Name="table1" EntityType="Self.table1" Schema="myDB" store:Type="Tables" /> <EntitySet Name="table2" EntityType="Self.table2" Schema="myDB" store:Type="Tables" /> <EntitySet Name="table3" EntityType="Self.table3" Schema="myDB" store:Type="Tables" /> <!--這行--> <EntitySet Name="my_view" EntityType="Self.my_view" Schema="myDB" store:Type="Tables" /> </EntityContainer> ```
再來是CSDL的部分,這區系統就完全沒有產生XML了,同樣要填入EntityType 與EntityContainer,
但要注意的是這區的欄位Type是C#的型態,
例如number就是Decimal,nvarchar2就是String,
如果是String欄位,好像還要加上 FixedLength="true/false" Unicode="true/false"屬性
把前面SSDL的架構複製貼上到這區,並且修改TYPE為C#型態
``` <EntityType Name="my_view"> <Key> <PropertyRef Name="ID" /> </Key> <Property Name="ID" Type="Decimal" Precision="38" Scale="0" Nullable="false" /> <Property Name="ORDER_NUMBER" Type="String" MaxLength="11" FixedLength="false" Unicode="true" /> <Property Name="CORRECT_ORDER" Type="Decimal" Precision="38" Scale="0" /> <Property Name="SEND_DATE" Type="String" MaxLength="8" FixedLength="false" Unicode="true"/> <Property Name="EM_ID" Type="String" MaxLength="4" FixedLength="false" Unicode="true" /> <Property Name="CM_ID" Type="String" MaxLength="8" FixedLength="false" Unicode="true"/> <Property Name="COST" Type="Decimal" Precision="38" Scale="0" /> </EntityType> ```
再來同樣在EntityContainer加上一行
``` <EntityContainer Name="myDBEntities" annotation:LazyLoadingEnabled="true"> <EntitySet Name="table1" EntityType="Self.AS400_ZDF201" /> <EntitySet Name="table2" EntityType="Self.AS400_ZDF203" /> <EntitySet Name="table3" EntityType="Self.AS400_ZDF25A" /> <!--這行--> <EntitySet Name="my_view" EntityType="Self.my_view" /> </EntityContainer> ```
最後是CS-SS對應區,加上這個view的EntitySetMapping
``` <EntitySetMapping Name="my_view"> <EntityTypeMapping TypeName="Model.my_view"> <MappingFragment StoreEntitySet="my_view"> <ScalarProperty Name="ID" ColumnName="ID" /> <ScalarProperty Name="ORDER_NUMBER" ColumnName="ORDER_NUMBER" /> <ScalarProperty Name="CORRECT_ORDER" ColumnName="CORRECT_ORDER" /> <ScalarProperty Name="SEND_DATE" ColumnName="SEND_DATE" /> <ScalarProperty Name="EM_ID" ColumnName="EM_ID" /> <ScalarProperty Name="CM_ID" ColumnName="CM_ID" /> <ScalarProperty Name="COST" ColumnName="COST" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> ```
然後F6編譯,雖然還是會出現ERROR2003,但是建立Controller之後我已經可以撈出資料了!
不過不知道這樣手動增加,之後還會跑出什麼問題...
標籤:
asp.NET,
Entity Framework,
Model,
MVC,
Oracle,
Primary Key,
View
2015年7月14日 星期二
System.Data.OracleClient與Oracle.DataAccess的變數問題
System.Data.OracleClient跟Oracle.DataAccess.dll 好像對變數的處理不一樣
我有一個查詢語法,日期處理是
跳出ORA-01008 : Not all variables bound
我要把後面的變數換個名稱,加入兩次變數,才能正常執行
我有一個查詢語法,日期處理是
DATE between to_date(:DATE || ' 00:00:00','yyyy-mm-dd hh24:mi:ss') and TO_DATE(:DATE || ' 23:59:59','yyyy-mm-dd hh24:mi:ss')
在用前者的時候變數只需要加入一次
Command.Parameters.Add(new OracleParameter("DATE", DATE));
但在用後者的時候,後面那個變數會被認為未給值,跳出ORA-01008 : Not all variables bound
我要把後面的變數換個名稱,加入兩次變數,才能正常執行
DATE between to_date(:DATE || ' 00:00:00','yyyy-mm-dd hh24:mi:ss') and TO_DATE(:DATE2 || ' 23:59:59','yyyy-mm-dd hh24:mi:ss')
Command.Parameters.Add(new OracleParameter("DATE", DATE));
Command.Parameters.Add(new OracleParameter("DATE2", DATE));
不過同樣的sql在oracle sql developer執行,他也只會要我輸入一次變數值就是了
2015年6月24日 星期三
oracle 找一筆找不到的資料 oracle find null record
假設資料表有一個欄位 10筆資料 數值為1~10
下查詢 WHERE 此欄位=11
就會回傳0列
但想要他回傳0列時顯示某字串
就先套一個max 再去套nvl 或decode之類的case功能
下查詢 WHERE 此欄位=11
就會回傳0列
但想要他回傳0列時顯示某字串
就先套一個max 再去套nvl 或decode之類的case功能
select nvl(max(column),'0') AS something from table
where 不能找到資料的條件
2015年5月22日 星期五
ORACLE在C# 執行多行指令的方法
我要刪除一個資料,順便刪除相關的資料表中屬於此資料SID的資料
但是一直執行SQL也很煩,找了可以一次執行多行的寫法
重點是要用分號隔開
StringBuilder sb = new StringBuilder();
sb.Append(@"BEGIN
delete from table1 where SID=:SID ;
delete from table2 where SID=:SID ;
delete from table3 where SID=:SID ;
delete from table4 where SID=:SID ;
delete from table5 where SID=:SID ;
END;
");
try
{
cnn.Open();
using (OracleCommand cmm = new OracleCommand(sb.ToString(), cnnTSTM))
{
cmm.Parameters.Clear();
cmm.Parameters.Add(new OracleParameter("SID", SID));
cmm.ExecuteNonQuery();
}
cnn.Close();
}
但是一直執行SQL也很煩,找了可以一次執行多行的寫法
重點是要用分號隔開
StringBuilder sb = new StringBuilder();
sb.Append(@"BEGIN
delete from table1 where SID=:SID ;
delete from table2 where SID=:SID ;
delete from table3 where SID=:SID ;
delete from table4 where SID=:SID ;
delete from table5 where SID=:SID ;
END;
");
try
{
cnn.Open();
using (OracleCommand cmm = new OracleCommand(sb.ToString(), cnnTSTM))
{
cmm.Parameters.Clear();
cmm.Parameters.Add(new OracleParameter("SID", SID));
cmm.ExecuteNonQuery();
}
cnn.Close();
}
2015年3月24日 星期二
Oracle SQL decode中文字變成問號
用程式下SQL
Table1
----------
1
2
3
4
5
select col1,
decode(col1,'1','型態1',''2','型態2','3','型態3','4','型態4','XX')
結果data row裡面看,中文都變成"??"
解決方式:
在連線字串裡面加上Unicode=True
就解決了
Table1
----------
1
2
3
4
5
select col1,
decode(col1,'1','型態1',''2','型態2','3','型態3','4','型態4','XX')
結果data row裡面看,中文都變成"??"
解決方式:
在連線字串裡面加上Unicode=True
就解決了
訂閱:
文章 (Atom)