2012-10-17 17 views
9

के साथ सी # में डालें डेटाबेस में INSERT डेटा का सबसे अच्छा तरीका क्या है?SQLCommand

यह है कि मैं क्या है, लेकिन यह गलत है है ..

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

पूर्ण Functio 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

आप अंतर्निहित कास्टिंग AddWithValue

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

नमूना कोड का उपयोग कर सकते,

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

@ केविन डीडब्ल्यू ने आपको 'cmd.ExecuteNonQuery();' कहा था? –

+0

हाँ, मैं पूर्ण कोड – KevinDW

0

आप अपने आवेदन में SQL कथन हार्डकोड से बचना चाहिए। यदि आप एडीओ और न ही एंटीटीफ्रेमवर्क का उपयोग नहीं करते हैं, तो मैं आपको डेटाबेस में संग्रहीत प्रक्रिया को विज्ञापन करने और इसे अपने सी # एप्लिकेशन से कॉल करने का सुझाव दूंगा। एक नमूना कोड यहां पाया जा सकता है: 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 डैप्पर एक स्टैक ओवरफ़्लो परियोजना :)

अद्यतन है: मेरा मानना ​​है कि आप नहीं कर सकते ईएफ की तरह कुछ के बिना यह आसान है। जब आप डेटाबेस कनेक्शन के साथ काम कर रहे हों तो 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

यदि वहां कोई conn2 नहीं था तो conn2.Open विफल हो जाएगा। – Paparazzi

+0

Form_Load में: conn2 = नए SqlConnection(); conn2.ConnectionString = ConfigurationManager.ConnectionStrings [ "connSpionshopString"] ConnectionString। ? – 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(); 
     } 
    } 
}