2012-10-17 12 views
9

Jaki jest najlepszy sposób na wprowadzenie danych do bazy danych?Wstaw w C# z SQLCommand

To jest to, co mam, ale to nie tak ..

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)); 

Funkcja dodawania danych do pola listy

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

ale nie do bazy ..

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

Pełna funkcjonalność 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

„To nie tak” jest tak niejasne, jak można być o tym, co się dzieje. Wyjaśnij, co obserwujesz. Zauważ, że musisz * wykonać * polecenie ... –

+1

Czy możesz podać więcej szczegółów? Co masz na myśli, że jest źle? –

+0

Czy otwierasz i zamykasz połączenie i wykonujesz zapytanie? – MattB

Odpowiedz

7

można użyć odlewania niejawny AddWithValue

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

przykładowy kod,

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

Próbowałem tego również, ale dane nie będą przechowywane w bazie danych .. – KevinDW

+0

@KevinDW zadzwoniłeś do 'cmd.ExecuteNonQuery();'? –

+0

Tak, dodałem pełny kod – KevinDW

0

Użyj AddWithValue(), ale be aware of the possibility of the wrong implicit type conversion.
tak:

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

Jak używać istniejącego kodu do pracy z kodem: http://stackoverflow.com/questions/23616987/how-to-display-information-to-the-user-after-making-a-selection – Si8

1

Można użyć dapper Biblioteka:

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

BTW Wytworny to projekt przepełnienie stosu :)

UPDATE: Sądzę, że nie możesz rób to prostsze bez czegoś takiego jak EF. Spróbuj także użyć instrukcji using podczas pracy z połączeniami z bazą danych. Spowoduje to automatyczne zamknięcie połączenia, nawet w przypadku wyjątku. Połączenie zostanie zwrócone do puli połączeń.

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

Spróbuj potwierdzić typ danych (SqlDbType) dla każdego parametru w bazie danych i zrobić to w ten sposób;

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

Jeśli nie było połączenia conn2, a następnie conn2.Open zakończyłoby się niepowodzeniem. – Paparazzi

+0

W Form_Load: conn2 = new SqlConnection(); conn2.ConnectionString = ConfigurationManager.ConnectionStrings ["connSpionshopString"]. ConnectionString; ? – KevinDW

+0

@kevinDW właśnie edytowałeś swój post, teraz mam również edycję kopalni. Duh! – 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(); 
     } 
    } 
}