실전에서 하나하나 하려고하니깐 시간이 엄청 걸린다.
이번에는 파라미터값을 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 |