'분류 전체보기'에 해당되는 글 157건
- 2009.01.24 Thread 동기화 문제 static일 경우
- 2009.01.24 종류별 Oracle 연동
- 2009.01.24 DB Data Select(Oracle)
동기화시 가장 많이 사용하는 키워드는 lock
하지만 lock사용시 인수가 static일경우 사용 방법이 조금 틀리다
기본적으로 lock을 걸 경우 간단하게 내부 필드일 경우 this를 사용하면 되지만
static일경우 바로 lock을 사용할시 에러..
그렇다면??
typeof(클래스명)
이러한 형태로 나타내 줘야 한다
Object는??
더욱 간단하다
클래스명.object
이련형태로 lock을 결면 성공~!!!
사용 예)
public class Top{ private static int limit = 0; public void SayHello(){ int hash = Thread.CurrentThread.GetHashCode(); int count =0; lock(typeof(Top)){ while(count<10){ Console.WriteLine("Thread " + hash + ":" + limit++); count++; Thread.Sleep(10); } }//lock } } Object일 경우) public class Top{ private static object obj = new object(); public void SayHello(){ int hash = Thread.CurrentThread.GetHashCode(); int count =0; lock(Top.obj){ while(count<10){ Console.WriteLine("Thread " + hash + ":" + count++); Thread.Sleep(10); } }//lock } }
Oledb &ODBC
string conStr = "Provider = MSDAORA" + //드라이버
"Data Source=XE;" + //서버
"User id = " // Oracle ID
"Password =" //Oracle Password
OracleClient //드라이버만 제외된 상태
string conStr = "Data Source=XE;" + //서버
"User id = " // Oracle ID
"Password =" //Oracle Password
(Namespace System.Data.OracleClient 추가)
특이점 : 보통 MSSQL 또는 MySql에서 Paramater인자로 @을 사용
그러나 Oracle에서는 :을 사용한다
using System; using System.Collections; using System.Text; using System.Data; using System.Data.OracleClient; namespace Tran_01 { public class OleDbParamTest { public static void Main() { string conStr = "Data Source = XE;" + "User id = ;" + "password = "; string Query = "Select * from address where addr = :addr1 or addr = :addr2"; try { OracleConnection Oconn = new OracleConnection(conStr); Oconn.Open(); Console.WriteLine("DB 열림"); OracleCommand cmd = new OracleCommand(Query, Oconn); cmd.Parameters.Add("addr1", OracleType.VarChar); cmd.Parameters.Add("addr2", OracleType.VarChar); cmd.Parameters["addr1"].Value = "seuol"; cmd.Parameters["addr2"].Value = "Ameria"; OracleDataReader Odr = cmd.ExecuteReader(); while (Odr.Read()) { Console.Write(Odr.GetFloat(0) + "t"); Console.Write(Odr.GetString(1) + "t"); Console.Write(Odr.GetString(2) + "t"); Console.WriteLine(); } Odr.Close(); Oconn.Close(); } catch (OracleException ErrMsg) { Console.WriteLine(ErrMsg.Message); Console.WriteLine("에러"); } } } } /* 역으로 집어넣는것은 Command.ExecuteNonQuery() 함수 사용 */