Posted
Filed under C#
프로그램을 하다 보면 중복되면 안되는 GUID를 만들어야 할 경우가 생긴다.
C#즉 .netframework 에서는 GUID를 쉽게 생성 할 수 있도록 API를 제공해준다.

[msdn]

http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

     Guid g;
    g = Guid.NewGuid();
    Console.WriteLine(g);
    Console.WriteLine(Guid.NewGuid());

위소스는 msdn에서 발췌 했습니다.



2013/02/28 14:39 2013/02/28 14:39
Posted
Filed under C#

using System.Web.Script.Serialization;

 public class ObjectToJson
    {
        public static string JsonString(Object obj)
        {
            string retval = "";

            System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            retval = oSerializer.Serialize(obj);

            return retval;
        }
    }

C#에서 javascript object , json 개체로 변경 하기 위해서
System.Web.Serialization.JavaScriptSerializer 객체를 사용 하면 된다.


   namespace System.Web.Script.Serialization
   System.Web.Extensions의 멤버


System.Web.Extensions 을 참조쪽에 추가 해야 합니다.
.net 4.0부터 제공이 되는거 같습니다.

Winform 프로젝트 할 때 System 쪽 네임스페이스 추가하여 작업을 했습니다.

2013/02/19 11:35 2013/02/19 11:35
Posted
Filed under C#

C#에서 mysql.net connection String

conn.ConnectionString = "Data Source=" + winformtest.Properties.Resources.mhost + ";Database=" + winformtest.Properties.Resources.muserid + ";User Id=" + winformtest.Properties.Resources.muserid + ";Password=" + winformtest.Properties.Resources.mpassword + "";

다음과 같이 사용 합니다.
resource에 커넥션 정보를 정의 하고 불러서 사용 할 수 있습니다.

2013/02/14 16:00 2013/02/14 16:00
Posted
Filed under C#

[원문]

Excel 내용을 읽는 것을 하고 있는데

Excel. range범위를

range = ESheet.get_Range("A1", missing); //A1 셀 선택

range = range.get_Resize(5,5) // A1부터 5,5의 크기

이런 식으로 설정 해줘야 해서.

이런 식으로는 텍스트를 읽어 올 수 있는데

내가 모든 EXCEL 파일의 셀의 크기를 알 수 없어서

읽어 오는 파일 마다 셀의 크기가 다른데 그럴 땐 어떻게 해야 하나

하루 종일 찾았다 ㅜㅜ

(엑셀에서 셀이 만들어 질 수 있는 크기까지 찾아서 모든 크기안에 있는 내용을 찾으려고 했는데

데이터가 너무 커서 오버플로우 남 ㅋ 1048576 x 16384)

셀에 대한 메서드가 따로 있어서

range를 설정 해 줄때 사용된 범위에 있는 마지막 셀을 이용하여

아무 엑셀 파일을 선택하면 텍스트를 읽어 올 수 있게 설정해 주었다.

public string ReadExcel(string path)

{

string filename = path;// string filename = "C:\\test.xlsx";

object missing = System.Reflection.Missing.Value;

Excel.Application EApp = new Excel.Application();

Excel.Workbook EBook;

Excel.Workbooks EBooks;

Excel.Sheets ESheets;

Excel._Worksheet ESheet;

Excel.Range range;

EApp.Visible = false;

// EApp.WindowState = Excel.XlWindowState.xlMinimized;

EBooks = EApp.Workbooks;

EBook = EApp.Workbooks.Open(filename, missing, missing, missing, missing, missing, missing

, missing, missing, missing, missing, missing, missing, missing, missing);

ESheets = EBook.Worksheets;

ESheet = (Excel._Worksheet)EBook.ActiveSheet;

ESheet = (Excel._Worksheet)ESheets.get_Item(1);

range = ESheet.get_Range("A1").SpecialCells(Excel.XlCellType.xlCellTypeLastCell);


long row = range.Row;

long column = range.Column;

String valueString = "";


for (long rowCounter = 1; rowCounter <= row; rowCounter++)

{

for (long colCounter = 1; colCounter <= column; colCounter++)

{

Excel.Range cell = (Excel.Range)ESheet.Cells[rowCounter, colCounter];


if (cell.Value == null)

valueString = string.Concat(valueString, " ");

else

{

valueString = string.Concat(valueString, cell.Value.ToString() + ",");

Console.Write(valueString);

}

textBox1.Text = valueString;

}

valueString = String.Concat(valueString,"\r\n");


}


================================================================================
저 위의 함수를 이용해서 그동안 엑셀을 읽어 왔는데,
데이터가 너무 클 경우에는 읽는 속도가 10분이 넘어감...ㅋㅋ( 2중 for문 때문인가ㅜㅜ )

그래서 새로운 방법을 알아 냄
DataTable을 이용하여서 DataTable에 값을 저장 -> 이 부분이 진짜 빠름

나는 필요한게 String 형이여서 row[Col].ToString()으로 변환 해준다

그래도 이전보다는 빨라졌당 1분 30초 정도


using System.Data.OleDb;


public string ReadExcel(string strFilePath)
{
// 엑셀 문서 내용 추출
object missing = System.Reflection.Missing.Value;
String valueString = "";
string strProvider = string.Empty;
strProvider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + strFilePath + @";Extended Properties=Excel 12.0";
OleDbConnection excelConnection = new OleDbConnection(strProvider);
excelConnection.Open();
string strQuery = "SELECT * FROM [Sheet1$]";
OleDbCommand dbCommand = new OleDbCommand(strQuery, excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
DataTable dTable = new DataTable();
dataAdapter.Fill(dTable);
// dTable에 추출된 내용을 String으로 변환
foreach (DataRow row in dTable.Rows)
{
foreach (DataColumn Col in dTable.Columns)
{
valueString += row[Col].ToString() + " ";
}
}
dTable.Dispose();
dataAdapter.Dispose();
dbCommand.Dispose();
excelConnection.Close();
excelConnection.Dispose();
return valueString;
}







- 참고

NamedRange.SpecialCells 메서드

셀에 대한 내용
http://technet.microsoft.com/ko-kr/subscriptions/microsoft.office.tools.excel.namedrange.specialcells
2013/02/12 16:57 2013/02/12 16:57
Posted
Filed under C#
[원문] : http://ndolson.com/444

숫자만 추출할때 쓰면 된다.
using System.Text.RegularExpressions;
위의 네임스페이스를 추가해주어야 한다.


string strText = "abc1234567ㅏㅣ"

string strNum = "";

strNum = Regex.Replace(strText, @"\D", "");


이렇게 하면 숫자만 추출된다.

닷넷 정규식에서 \d는 숫자. \D는 숫자가 아닌 문자를 의미합니다.


MSDN에서 보기
Regex.Replace 메서드 (String, MatchEvaluator)
http://msdn2.microsoft.com/ko-kr/library/cft8645c(VS.80).aspx

2013/02/12 16:39 2013/02/12 16:39
Posted
Filed under C#
C# , System.Environment.SetEnvironmentVariable
c#에서 시스템 변수를 사용 할 경우
예를 들어 로그인 여부를 처리 할경우
static 클레스를 물론 만들어도 되지만 다음과 같이 처리 할 수 도 있음

 System.Environment.SetEnvironmentVariable("islogin", "1");
 
다음은 로그인 여부를 호출 하는 부분
System.Environment.GetEnvironmentVariable("islogin");

2013/02/12 15:40 2013/02/12 15:40
Posted
Filed under C#
[원문] : http://www.jejusarang.com/?menu=knowhow&p=20&bwdt=1221669407&lp=1

class Class1
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 여기에 응용 프로그램을 시작하는 코드를 추가합니다.
//
string tmp = "한글English";

byte []bArray_ =Encoding.Default.GetBytes(tmp);
Console.Out.WriteLine(Encoding.Default.EncodingName);
Console.Out.WriteLine(Encoding.Default.GetString(bArray_));
Console.Out.WriteLine(bArray_.Length);

byte []u7Array_ = Encoding.Convert(Encoding.Default, Encoding.UTF7, bArray_);
Console.Out.WriteLine(Encoding.UTF7.EncodingName);
Console.Out.WriteLine(Encoding.UTF7.GetString(u7Array_));
Console.Out.WriteLine(u7Array_.Length);

byte []u8Array_ = Encoding.Convert(Encoding.Default, Encoding.UTF8, bArray_);
Console.Out.WriteLine(Encoding.UTF8.EncodingName);
Console.Out.WriteLine(Encoding.UTF8.GetString(u8Array_));
Console.Out.WriteLine(u8Array_.Length);

byte []uArray_ = Encoding.Convert(Encoding.Default, Encoding.Unicode, bArray_);
Console.Out.WriteLine(Encoding.Unicode.EncodingName);
Console.Out.WriteLine(Encoding.Unicode.GetString(uArray_));
Console.Out.WriteLine(uArray_.Length);

byte []aArray_ = Encoding.Convert(Encoding.Default, Encoding.ASCII, bArray_);
Console.Out.WriteLine(Encoding.ASCII.EncodingName);
Console.Out.WriteLine(Encoding.ASCII.GetString(aArray_));
Console.Out.WriteLine(aArray_.Length);
}
}

-----------------------------------------------------------------------------------

- 결과:
한국어
한글English
11
유니코드(UTF-7)
한글English
15
유니코드(UTF-8)
한글English
13
유니코드
한글English
18
US-ASCII
??English
9
2013/02/12 14:55 2013/02/12 14:55
Posted
Filed under C#
private string getWordByByte( string src, int byteCount )
{
System.Text.Encoding myEncoding = System.Text.Encoding.GetEncoding("ks_c_5601-1987");

byte[] buf = myEncoding.GetBytes( src );

return myEncoding.GetString( buf, 0, byteCount );
}
string txtKor = "가나다라마";
string txtEng = "abcde";

Console.WriteLine( getWordByByte( txtKor, 5 ) );
Console.WriteLine( getWordByByte( txtEng, 5 ) );
가나
abcde


만약, byteCount를 5로 했을때 한글 3글자를 얻어오고 싶다면 함수 부분을 다음과 같이 수정해 주면 됩니다.

private string getWordByByte( string src, int byteCount )
{
System.Text.Encoding myEncoding = System.Text.Encoding.GetEncoding("ks_c_5601-1987");

byte[] buf = myEncoding.GetBytes( src );

string result = myEncoding.GetString( buf, 0, byteCount );

if( byteCount != result.Length )
{
result = myEncoding.GetString( buf, 0, byteCount+1 );
}


return result;
}
[원문] :http://grad.egloos.com/878185
2013/02/12 14:53 2013/02/12 14:53
Posted
Filed under C#
[원문] : http://www.dotnetspider.com/resources/37688-A-Simple-Window-Service-With-Timer.aspx

visual studio c# 2010,
C#을 이용한 윈도우 서비스 개발 , 타이머를 이용한 실시간 처리 에 활용할 만한 아주 기본적인소스 ,
참고-> system.Window.Form 에 있는 timer는 사용 할 수 없습니다.
이것 때문에 엄청 나게 삽질함 , System.Timer를 사용하면됨

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Timers;
namespace TestWindowsService
{
    public partial class Service1 : ServiceBase
    {
        private System.Timers.Timer timer = null;

        public Service1()
        {
            double interval = 100000;
            InitializeComponent();
            timer = new System.Timers.Timer(interval);
            timer.Elapsed += new ElapsedEventHandler(this.ServiceTimer_Tick);

        }

        protected override void OnStart(string[] args)
        {
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Start();
        }

        protected override void OnStop()
        {
            timer.AutoReset = false;
            timer.Enabled = false;
        }

        private void ServiceTimer_Tick(object sender, System.Timers.ElapsedEventArgs e)
        {
            this.timer.Stop();
            SqlCommand MyCmd = new SqlCommand();
            DataSet MyDs = new DataSet();
            SqlConnection MyCon = new SqlConnection(ConfigurationSettings.AppSettings["MyCon"].ToString());
            try
            {
                MyCmd.Connection = MyCon;
                MyCmd.CommandText = "insert into CustOrder (date,price,customer) values ('" + DateTime.Now.ToShortDateString() + "','120','vivek sharma')";
                MyCon.Open();
                MyCmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
            finally
            {
                MyCon.Close();
                MyCmd.Dispose();
            }
            this.timer.Start();
        }
        protected override void OnPause()
        {
            this.timer.Stop();
        }

        protected override void OnContinue()
        {
            this.timer.Start();
        }

    }
}
2013/02/05 16:58 2013/02/05 16:58
Posted
Filed under C#
[원문] : http://blog.naver.com/PostView.nhn?blogId=coolpixer&logNo=100034280379


using System;
using System.Windows.Forms;
using System.Text;
using System.Net;
using System.IO;


/// 전달 하고자 하는 값
string str_sendvalue = "who=나야나"+"&"+"you=너는누구냐" +"&"+"etc=1234567890" + ; // 1,2 번 모두 똑같이 이값을 가지고 이용하네요 ^^

/// 방법 1 : 시작 ( 내부적을 전송만 하고 끝나는 형태 , 일반적으로 통신형태에 유용한듯 )
/// 실제 테스트는 안해봣음 소스는 이상없는데 web server 가 나한테 없어 왔는지는 모름

HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create("www.test.com"); // 객체를 생성한다.
hwr.Method = "POST"; // 포스트 방식으로 전달
hwr.ContentType = @"application/x-www-form-urlencoded";
byte[] buffer = Encoding.Default.GetBytes(str_sendvalue);
hwr.ContentLength = buffer.Length;
Stream sendStream = hwr.GetRequestStream(); // sendStream 을 생성한다.
sendStream.Write( buffer, 0, buffer.Length); // 데이터를 전송한다.
sendStream.Close(); // sendStream 을 종료한다.

/// 방법 1 : 종료



/// 방법 2 : 시작 ( 브라우져를 새창으로 띄워 화면을 보는 방식 , 사이트 연동에 적당한듯 )
/// 한글까지 잘 넘어가는거 확인했습니다. 잘되네요 ^^
object vHeaUrl = "www.test.com" ; // 호출할 url
object vFlag = 1; // 새창으로 띄우기
object framename = ""; // 이건 모르겟음
object buffer = Encoding.Default.GetBytes(str_sendvalue); // 데이터
object vHeaders = "Content-Type: application/x-www-form-urlencoded" + 0x10+ 0x13 ; // 헤더

AxSHDocVw.AxWebBrowser ie = new AxSHDocVw.AxWebBrowser(); // 브라유져를 만든다. 폼에 콤퍼넌트를 올려놓으시면 필요없습니다.
this.Controls.Add(ie); // 생성된 브라우져를 폼위에 올려 놓는다. 폼에 콤퍼넌트를 올려놓으시면 필요없습니다.
ie.Navigate2( ref vHeaUrl , ref vFlag ,ref framename, ref buffer, ref vHeaders ); // 호출한다.

/// 방법 2 : 종료

2012/10/15 18:14 2012/10/15 18:14