2013년 1월 4일 금요일

C# 쓰레드 이야기 - 14. 마지막 이야기



C# 쓰레드 이야기 - 14. 마지막 이야기
http://www.hanb.co.kr/network/view.html?bi_id=426

2013년 1월 3일 목요일

C# Date and Time Format Strings

C# Date and Time Format Strings

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx



The following table describes the custom date and time format specifiers and displays a result string produced by each format specifier. If a particular format specifier produces a localized result string, the example also notes the culture to which the result string applies. See the Notes section for additional information about using custom date and time format strings.
Format specifier
Description
Examples
"d"
The day of the month, from 1 through 31.
More information: The "d" Custom Format Specifier.
6/1/2009 1:45:30 PM -> 1
6/15/2009 1:45:30 PM -> 15
"dd"
The day of the month, from 01 through 31.
6/1/2009 1:45:30 PM -> 01
6/15/2009 1:45:30 PM -> 15
"ddd"
The abbreviated name of the day of the week.
6/15/2009 1:45:30 PM -> Mon (en-US)
6/15/2009 1:45:30 PM -> Пн (ru-RU)
6/15/2009 1:45:30 PM -> lun. (fr-FR)
"dddd"
The full name of the day of the week.
6/15/2009 1:45:30 PM -> Monday (en-US)
6/15/2009 1:45:30 PM -> понедельник (ru-RU)
6/15/2009 1:45:30 PM -> lundi (fr-FR)
"f"
The tenths of a second in a date and time value.
More information: The "f" Custom Format Specifier.
6/15/2009 13:45:30.617 -> 6
6/15/2009 13:45:30.050 -> 0
"ff"
The hundredths of a second in a date and time value.
6/15/2009 13:45:30.617 -> 61
6/15/2009 13:45:30.005 -> 00
"fff"
The milliseconds in a date and time value.
6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> 000
"ffff"
The ten thousandths of a second in a date and time value.
6/15/2009 13:45:30.6175 -> 6175
6/15/2009 13:45:30.00005 -> 0000
"fffff"
The hundred thousandths of a second in a date and time value.
6/15/2009 13:45:30.61754 -> 61754
6/15/2009 13:45:30.000005 -> 00000
"ffffff"
The millionths of a second in a date and time value.
6/15/2009 13:45:30.617542 -> 617542
6/15/2009 13:45:30.0000005 -> 000000
"fffffff"
The ten millionths of a second in a date and time value.
6/15/2009 13:45:30.6175425 -> 6175425
6/15/2009 13:45:30.0001150 -> 0001150
"F"
If non-zero, the tenths of a second in a date and time value.
More information: The "F" Custom Format Specifier.
6/15/2009 13:45:30.617 -> 6
6/15/2009 13:45:30.050 -> (no output)
"FF"
If non-zero, the hundredths of a second in a date and time value.
6/15/2009 13:45:30.617 -> 61
6/15/2009 13:45:30.005 -> (no output)
"FFF"
If non-zero, the milliseconds in a date and time value.
6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> (no output)
"FFFF"
If non-zero, the ten thousandths of a second in a date and time value.
6/1/2009 13:45:30.5275 -> 5275
6/15/2009 13:45:30.00005 -> (no output)
"FFFFF"
If non-zero, the hundred thousandths of a second in a date and time value.
6/15/2009 13:45:30.61754 -> 61754
6/15/2009 13:45:30.000005 -> (no output)
"FFFFFF"
If non-zero, the millionths of a second in a date and time value.
6/15/2009 13:45:30.617542 -> 617542
6/15/2009 13:45:30.0000005 -> (no output)
"FFFFFFF"
If non-zero, the ten millionths of a second in a date and time value.
6/15/2009 13:45:30.6175425 -> 6175425
6/15/2009 13:45:30.0001150 -> 000115
"g", "gg"
The period or era.
6/15/2009 1:45:30 PM -> A.D.
"h"
The hour, using a 12-hour clock from 1 to 12.
More information: The "h" Custom Format Specifier.
6/15/2009 1:45:30 AM -> 1
6/15/2009 1:45:30 PM -> 1
"hh"
The hour, using a 12-hour clock from 01 to 12.
6/15/2009 1:45:30 AM -> 01
6/15/2009 1:45:30 PM -> 01
"H"
The hour, using a 24-hour clock from 0 to 23.
More information: The "H" Custom Format Specifier.
6/15/2009 1:45:30 AM -> 1
6/15/2009 1:45:30 PM -> 13
"HH"
The hour, using a 24-hour clock from 00 to 23.
6/15/2009 1:45:30 AM -> 01
6/15/2009 1:45:30 PM -> 13
"K"
Time zone information.
More information: The "K" Custom Format Specifier.
With DateTime values:
6/15/2009 1:45:30 PM, Kind Unspecified ->
6/15/2009 1:45:30 PM, Kind Utc -> Z
6/15/2009 1:45:30 PM, Kind Local -> -07:00 (depends on local computer settings)
With DateTimeOffset values:
6/15/2009 1:45:30 AM -07:00 --> -07:00
6/15/2009 8:45:30 AM +00:00 --> +00:00
"m"
The minute, from 0 through 59.
More information: The "m" Custom Format Specifier.
6/15/2009 1:09:30 AM -> 9
6/15/2009 1:09:30 PM -> 9
"mm"
The minute, from 00 through 59.
6/15/2009 1:09:30 AM -> 09
6/15/2009 1:09:30 PM -> 09
"M"
The month, from 1 through 12.
More information: The "M" Custom Format Specifier.
6/15/2009 1:45:30 PM -> 6
"MM"
The month, from 01 through 12.
6/15/2009 1:45:30 PM -> 06
"MMM"
The abbreviated name of the month.
6/15/2009 1:45:30 PM -> Jun (en-US)
6/15/2009 1:45:30 PM -> juin (fr-FR)
6/15/2009 1:45:30 PM -> Jun (zu-ZA)
"MMMM"
The full name of the month.
6/15/2009 1:45:30 PM -> June (en-US)
6/15/2009 1:45:30 PM -> juni (da-DK)
6/15/2009 1:45:30 PM -> uJuni (zu-ZA)
"s"
The second, from 0 through 59.
More information: The "s" Custom Format Specifier.
6/15/2009 1:45:09 PM -> 9
"ss"
The second, from 00 through 59.
6/15/2009 1:45:09 PM -> 09
"t"
The first character of the AM/PM designator.
More information: The "t" Custom Format Specifier.
6/15/2009 1:45:30 PM -> P (en-US)
6/15/2009 1:45:30 PM -> 午 (ja-JP)
6/15/2009 1:45:30 PM -> (fr-FR)
"tt"
The AM/PM designator.
6/15/2009 1:45:30 PM -> PM (en-US)
6/15/2009 1:45:30 PM -> 午後 (ja-JP)
6/15/2009 1:45:30 PM -> (fr-FR)
"y"
The year, from 0 to 99.
More information: The "y" Custom Format Specifier.
1/1/0001 12:00:00 AM -> 1
1/1/0900 12:00:00 AM -> 0
1/1/1900 12:00:00 AM -> 0
6/15/2009 1:45:30 PM -> 9
"yy"
The year, from 00 to 99.
1/1/0001 12:00:00 AM -> 01
1/1/0900 12:00:00 AM -> 00
1/1/1900 12:00:00 AM -> 00
6/15/2009 1:45:30 PM -> 09
"yyy"
The year, with a minimum of three digits.
1/1/0001 12:00:00 AM -> 001
1/1/0900 12:00:00 AM -> 900
1/1/1900 12:00:00 AM -> 1900
6/15/2009 1:45:30 PM -> 2009
"yyyy"
The year as a four-digit number.
1/1/0001 12:00:00 AM -> 0001
1/1/0900 12:00:00 AM -> 0900
1/1/1900 12:00:00 AM -> 1900
6/15/2009 1:45:30 PM -> 2009
"yyyyy"
The year as a five-digit number.
1/1/0001 12:00:00 AM -> 00001
6/15/2009 1:45:30 PM -> 02009
"z"
Hours offset from UTC, with no leading zeros.
More information: The "z" Custom Format Specifier.
6/15/2009 1:45:30 PM -07:00 -> -7
"zz"
Hours offset from UTC, with a leading zero for a single-digit value.
6/15/2009 1:45:30 PM -07:00 -> -07
"zzz"
Hours and minutes offset from UTC.
6/15/2009 1:45:30 PM -07:00 -> -07:00
":"
The time separator.
More information: The ":" Custom Format Specifier.
6/15/2009 1:45:30 PM -> : (en-US)
6/15/2009 1:45:30 PM -> . (it-IT)
6/15/2009 1:45:30 PM -> : (ja-JP)
"/"
The date separator.
More Information: The "/" Custom Format Specifier.
6/15/2009 1:45:30 PM -> / (en-US)
6/15/2009 1:45:30 PM -> - (ar-DZ)
6/15/2009 1:45:30 PM -> . (tr-TR)
"string"
'string'
Literal string delimiter.
6/15/2009 1:45:30 PM ("arr:" h:m t) -> arr: 1:45 P
6/15/2009 1:45:30 PM ('arr:' h:m t) -> arr: 1:45 P
%
Defines the following character as a custom format specifier.
6/15/2009 1:45:30 PM (%h) -> 1
\
The escape character.
6/15/2009 1:45:30 PM (h \h) -> 1 h
Any other character
The character is copied to the result string unchanged.
More information: Using the Escape Character.
6/15/2009 1:45:30 AM (arr hh:mm t) -> arr 01:45 A
The following sections provide additional information about each custom date and time format specifier. Unless otherwise noted, each specifier produces an identical string representation regardless of whether it is used with a DateTime value or a DateTimeOffset value.
The "d" custom format specifier represents the day of the month as a number from 1 through 31. A single-digit day is formatted without a leading zero.
If the "d" format specifier is used without other custom format specifiers, it is interpreted as the "d" standard date and time format specifier. For more information about using a single format specifier, see Using Single Custom Format Specifiers later in this topic.
The following example includes the "d" custom format specifier in several format strings.
DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15); 

Console.WriteLine(date1.ToString("d, M", 
                  CultureInfo.InvariantCulture)); 
// Displays 29, 8

Console.WriteLine(date1.ToString("d MMMM", 
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays 29 August
Console.WriteLine(date1.ToString("d MMMM", 
                  CultureInfo.CreateSpecificCulture("es-MX")));
// Displays 29 agosto                                                

2012년 12월 30일 일요일

RuntimeCallableWrappers disconncet


RuntimeCallableWrappers disconncet

DisconnectedContext was detected - Problems when using HttpClient


The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2ee0 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.






I got the solution
Need to uncheck ContextSwitchDeadlock under Debug->Exceptions->Managed Debugging Assistants.
After unchecking ContextSwitchDeadlock its not throwing the error.

참고사이트 : 
http://stackoverflow.com/questions/4871013/clr-has-been-unable-to-transition-from-com-context-0x3b2d70-to-com-context

C# mssql Binary insert




sql server 에서 binary(고정) 또는 varbinary(가변) 형식으로 컬럼 타입을 맟춰 주시면 될듯 합니다.
입력 방식은
    byte[] bin = new byte[]{0x01, 0x02, 0x03, ..... 0xff};

    SqlConnection Conn = new SqlConnection("Data Source=localhost;....");
    SqlCommand Comm = new SqlCommand("INSERT INTO test Values(@BinData)", Conn);

    Comm.Parameters.Add(@BinData", SqlDbType.VarBinary, bin.Length).Value = bin;
    Conn.Open();
    Comm.ExecuteNonQuery();


DB
create table testtable1(
       serial int not null,
       userid char(25) not null,
       Template1 VarBinary(1500),
       Template2 Binary null,
       PRIMARY KEY CLUSTERED 
       (
             [userid] DESC
       )ON [PRIMARY]
);



// Assuming "conn" is an open SqlConnection
using(SqlCommand cmd = new SqlCommand("INSERT INTO mssqltable(varbinarycolumn) VALUES (@binaryValue)", conn))
{
    // Replace 8000, below, with the correct size of the field
    cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, 8000).Value = arraytoinsert;
    cmd.ExecuteNonQuery();
}

C# SQL 조회 SqlDataReader




C# SqlDataReader 클래스
SqlDataReader 클래스는 SQL Server와 연결을 유지한 상태에서 한번에 한 레코드(One Row)씩 데이타를 가져오는데 사용된다. SqlCommand.ExecuteReader()로부터 리턴되는 SqlDataReader 객체는 (파일의 BOF와 같이) 첫 Row 이전에 포인터를 위치시키기 때문에 개발자는 SqlDataReader의 Read()메서드를 써서 처음 Row로 이동해 주어야 한다. DataReader는 하나의 Connection에 하나만 Open되어 있어야 하며, 사용이 끝나면 Close() 메서드를 호출하여 닫아 준다. 

예제

public void Sample()
{
    StringBuilder sb = new StringBuilder();
    using (SqlConnection conn = new SqlConnection(strConn))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT * FROM Product";
        
        // SqlDataReader 객체를 리턴
        SqlDataReader rdr = cmd.ExecuteReader();                

        // 다음 레코드 계속 가져와서 루핑
        while (rdr.Read())
        {
            // C# 인덱서를 사용하여
            // 필드 데이타 엑세스
            string s = rdr["Name"] as string;
            sb.Append(s);
        }
        // 사용후 닫음
        rdr.Close();

    }
    //... sb 데이타 사용
}