본문 바로가기
Language/C#

c#에서 쿼리문 직접 작성하기

by ninanio3 2011. 10. 24.

실전에서 하나하나 하려고하니깐 시간이 엄청 걸린다.
이번에는 파라미터값을 Stored Procedure에 보내는게 아니라, c#에서 직접 쿼리문을 작성해서 날리는 방법을 써보기로 했다.

query = "Insert into [Table명] values (a, b, c)";

책에는 이렇게 나와있는데, 아무래도 아닌것같다. DB Table Column에 붙는 원리를 모르겠단말이다...
sql문은 "Insert into [Table명] (a,b,c) values (@a, @b, @c)" 이렇게되는데...
sqlcommand에서 쿼리문과 SqlConnection정보를 파라미터값에 실어보낸다.
말로 설명이 안되리라... 코드를 직접 넣어보자,,

SqlCommand cmd = new SqlCommand(query, conn);
SqlCommand cmd1 = new SqlCommand(query1, conn);
SqlCommand cmd2 = new SqlCommand(query2, conn);

cmd.ExecuteNonQuery();
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();

근데 이렇게 써넣으면 스칼라 변수 "@idx"을(를) 선언해야 합니다. 이런게 나온다.

그래서 파라미터값을 입력해주었다.

cmd.Parameters.Add("@idx", SqlDbType.VarChar, 50, "idx");
cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50, "pwd");

cmd.Parameters["@idx"].Value = idx;
cmd.Parameters["@pwd"].Value = pwd;

그러면 이런 에러가 뜬다. 스칼라 변수 "@idx"을(를) 선언해야 합니다.
cmd.Parameters가 답은 아니라는 얘긴데...

알고보니 순서문제다...
먼저 cmd를 생성해주고 거기다 parameters 값들을 선언, 대입을 시켜줘야하는데,
나는 배우길 parameters값을 위에다 선언했지만 쿼리문을 직접 넣어야 하는 지금...
cmd = new SqlCommand(query1, conn); 을 아래에 선언을 해주면서,
파라미터에 실렸던 cmd들을 초기화시켜주었다 ^^
그러니깐 당연히 안되지;;

그렇다면 순서는
string connStr = "Server = localhost; Database = USRMGR; user id = sa; password = ****";
                    conn = new SqlConnection(connStr);
                    
                    cmd = new SqlCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "INSERT INTO TBLUSRMGR (idx, pwd) VALUES (@idx, @pwd)";

                    cmd.Parameters.Add("@idx", SqlDbType.VarChar, 50, "idx");
                    cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50, "pwd");
                    cmd.Parameters["@idx"].Value = idx;
                    cmd.Parameters["@pwd"].Value = pwd;

                    //cmd = new SqlCommand(query1, conn);  //얘를 빼면 돼. 이놈이 cmd를 다시만든다..
                    cmd.Connection = conn;

                    if (conn.State == ConnectionState.Open) conn.Close();
                    conn.Open();

                    cmd.ExecuteNonQuery();

'Language > C#' 카테고리의 다른 글

c# 할당되지 않은 'value'지역 변수를 사용했습니다.  (0) 2011.10.25
c# 네임스페이스 접근하기  (0) 2011.10.25
에러검색  (0) 2011.10.24
c# get set 의 고찰...  (2) 2011.10.21
queue, stack, heap 메모리  (0) 2011.10.18