2012-10-17 3 views
9

데이터를 데이터베이스에 INSERT하는 가장 좋은 방법은 무엇입니까? SQLCommand를 사용하여 C#에 삽입

내가 가지고 있지만 그것은 잘못된 것입니다 ..

cmd.CommandText = "INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)"; 

cmd.Parameters.Add(new SqlParameter("@param1", klantId)); 
cmd.Parameters.Add(new SqlParameter("@param2", klantNaam)); 
cmd.Parameters.Add(new SqlParameter("@param3", klantVoornaam)); 

기능은 목록 상자에 데이터를 추가

아니라 데이터베이스에

http://www.pictourl.com/viewer/37e4edcf ..

http://www.pictourl.com/viewer/4d5721fc

전체 기능 N :

private void Form1_Load(object sender, EventArgs e) 
    {    
     conn2 = new SqlConnection(); 
     conn2.ConnectionString = ConfigurationManager.ConnectionStrings["connSpionshopString"].ConnectionString; 
    } 

private void button2_Click(object sender, EventArgs e) 
    {   
     string sqlCmd = "SELECT naam,voornaam,klant_id FROM klant;"; 
     SqlCommand cmd = new SqlCommand(sqlCmd, conn2); 

     conn2.Open(); 

     using(SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       listBox2.Items.Add(reader.GetString(0) + " " + reader.GetString(1) + " (" + reader.GetInt16(2) + ")"); 
      } 
     } 

     conn2.Close(); 
    } 



private void button4_Click(object sender, EventArgs e) 
    { 
     int klantId = Convert.ToInt32(textBox1.Text); 
     string klantNaam = textBox2.Text; 
     string klantVoornaam = textBox3.Text; 

     conn2.Open(); 

     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn2; 
     cmd.CommandText = "INSERT INTO klant(klant_id, naam, voornaam) VALUES(@param1,@param2,@param3)"; 

     cmd.Parameters.AddWithValue("@param1", klantId); 
     cmd.Parameters.AddWithValue("@param2", klantNaam); 
     cmd.Parameters.AddWithValue("@param3", klantVoornaam); 

     cmd.ExecuteNonQuery(); 

     conn2.Close(); 
    } 
+4

는 "그것은 잘못"당신은 무슨 일이 일어나고 있는지에 대해 할 수있는 약으로 모호하다. 당신이 관찰하고있는 것을 설명하십시오. 실제로 * 명령을 실행할 필요가 있음을 유의하십시오 ... –

+1

더 자세한 정보를 제공 할 수 있습니까? 그게 잘못되었다 니? –

+0

연결을 열고 닫고 쿼리를 실행합니까? – MattB

답변

7

당신은 당신은 당신의 응용 프로그램에서 SQL 문을 하드 코딩하지 않도록해야합니다, 암시 적 캐스팅을

using (SqlConnection conn = new SqlConnection("connectionString")) 
{ 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     cmd.Connection = conn; 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = @"INSERT INTO klant(klant_id,naam,voornaam) 
          VALUES(@param1,@param2,@param3)"; 

     cmd.Parameters.AddWithValue("@param1", klantId); 
     cmd.Parameters.AddWithValue("@param2", klantNaam); 
     cmd.Parameters.AddWithValue("@param3", klantVoornaam); 

     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch(SqlException e) 
     { 
      MessgeBox.Show(e.Message.ToString(), "Error Message"); 
     } 

    } 
} 
+0

나는이 하나도 시도했지만 데이터는 데이터베이스에 저장되지 않습니다 .. – KevinDW

+0

@KevinDW 당신은'cmd.ExecuteNonQuery();'를 호출 했습니까? –

+0

예, 전체 코드를 추가했습니다 – KevinDW

0

AddWithValue

cmd.Parameters.AddWithValue("@param1", klantId); 
cmd.Parameters.AddWithValue("@param2", klantNaam); 
cmd.Parameters.AddWithValue("@param3", klantVoornaam); 

샘플 코드를 사용할 수 있습니다. ADO 나 EntityFramework를 사용하지 않는다면 데이터베이스에 저장 프로 시저를 광고하고 C# 응용 프로그램에서 호출하는 것이 좋습니다. 샘플 코드는 How to execute a stored procedure within C# program 및 여기 http://msdn.microsoft.com/en-us/library/ms171921%28v=vs.80%29.aspx에서 찾을 수 있습니다.

0

AddWithValue()이지만 be aware of the possibility of the wrong implicit type conversion을 사용하십시오. 이 같은
:

cmd.Parameters.AddWithValue("@param1", klantId); 
    cmd.Parameters.AddWithValue("@param2", klantNaam); 
    cmd.Parameters.AddWithValue("@param3", klantVoornaam); 
1
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandText = "INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)"; 

     command.Parameters.AddWithValue("@param1", klantId)); 
     command.Parameters.AddWithValue("@param2", klantNaam)); 
     command.Parameters.AddWithValue("@param3", klantVoornaam)); 

     command.ExecuteNonQuery(); 
    } 
} 
+0

기존 코드를 사용하여 코드 숨김 작업 방법 : http://stackoverflow.com/questions/23616987/how-to-display-information-to-the-user-after-making-a-selection – Si8

1

당신은 dapper 라이브러리를 사용할 수 있습니다

conn2.Execute(@"INSERT INTO klant(klant_id,naam,voornaam) VALUES (@p1,@p2,@p3)", 
       new { p1 = klantId, p2 = klantNaam, p3 = klantVoornaam }); 

BTW 단정은 스택 오버플로 프로젝트 :

업데이트입니다 : 당신이 할 수없는 생각 EF와 같은 것이 없다면 더 간단하게하십시오. 또한 데이터베이스 연결로 작업 할 때 using 문을 사용해보십시오. 이렇게하면 예외가 발생한 경우에도 연결이 자동으로 닫힙니다. 연결은 연결 풀로 반환됩니다.

private readonly string _spionshopConnectionString; 

private void Form1_Load(object sender, EventArgs e) 
{    
    _spionshopConnectionString = ConfigurationManager 
      .ConnectionStrings["connSpionshopString"].ConnectionString; 
} 

private void button4_Click(object sender, EventArgs e) 
{ 
    using(var connection = new SqlConnection(_spionshopConnectionString)) 
    { 
     connection.Execute(@"INSERT INTO klant(klant_id,naam,voornaam) 
           VALUES (@klantId,@klantNaam,@klantVoornaam)", 
           new { 
             klantId = Convert.ToInt32(textBox1.Text), 
             klantNaam = textBox2.Text, 
             klantVoornaam = textBox3.Text 
            }); 
    } 
} 
29

데이터베이스의 각 매개 변수에 대한 데이터 형식을 확인 (SqlDbType)을 시도하고이 방법을;

using(SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connSpionshopString"].ConnectionString)) 
{ 
    connection.Open(); 
    string sql = "INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)"; 
     SqlCommand cmd = new SqlCommand(sql,connection); 
     cmd.Parameters.Add("@param1", SqlDbType.Int).value = klantId 
     cmd.Parameters.Add("@param2", SqlDbType.Varchar, 50).value = klantNaam; 
     cmd.Parameters.Add("@param3", SqlDbType.Varchar, 50).value = klantVoornaam; 
     cmd.CommandType = CommandType.Text; 
     cmd.ExecuteNonQuery(); 
} 
+2

If conn2가 없었고 conn2.Open은 실패했습니다. – Paparazzi

+0

Form_Load에서 : conn2 = new SqlConnection(); conn2.ConnectionString = ConfigurationManager.ConnectionStrings [ "connSpionshopString"]. 연결 문자열; ? – KevinDW

+0

@kevinDW 방금 귀하의 게시물을 편집했습니다. 이제 편집도 완료되었습니다. 이런! – Oluwafemi

0
public class customer 
{ 
    public void InsertCustomer(string name,int age,string address) 
    { 
     // create and open a connection object 
     using(SqlConnection Con=DbConnection.GetDbConnection()) 
     { 
      // 1. create a command object identifying the stored procedure 
      SqlCommand cmd = new SqlCommand("spInsertCustomerData",Con); 

      // 2. set the command object so it knows to execute a stored procedure 
      cmd.CommandType = CommandType.StoredProcedure; 

      SqlParameter paramName = new SqlParameter(); 
      paramName.ParameterName = "@nvcname"; 
      paramName.Value = name; 
      cmd.Parameters.Add(paramName); 

      SqlParameter paramAge = new SqlParameter(); 
      paramAge.ParameterName = "@inage"; 
      paramAge.Value = age; 
      cmd.Parameters.Add(paramAge); 

      SqlParameter paramAddress = new SqlParameter(); 
      paramAddress.ParameterName = "@nvcaddress"; 
      paramAddress.Value = address; 
      cmd.Parameters.Add(paramAddress); 

      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
관련 문제