C# i insert sql

0

Witam czy mógłby ktoś pomóc przy dodawaniu wiersza do tabeli.
Utworzyłem w Visualu baze danych, potem utworzylem w niej tabele, uworzylem Data Sorce View z wykorzystaniem wszczesniej utworzonej tabeli. Moje polaczenie i wykonanie operacji insert wyglada astepujaco:

 
string sConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Baza_danych.mdf;Integrated Security=True;User Instance=True";

SqlConnection objConn = new SqlConnection(sConnectionString);
objConn.Open();
string sSQL = "INSERT INTO[dbo].[Table2]([Imię i Nazwisko], [Numer komputera]) VALUES(@Imię_i_Nazwisko, @Numer_komputera)";
SqlCommand objCmd = new SqlCommand(sSQL, objConn);
objCmd.Parameters.AddWithValue("@Numer_komputera", nr_komputera);
objCmd.Parameters.AddWithValue("@Imie_i_Nazwisko", imie_nazwisko);
objCmd.ExecuteNonQuery();

Ktos wie co jest źle?
Za wszelka pomoc bede bardzo wdzieczny.

Pozdrawiam.

0

Spróbuj tak:

string sSQL = "INSERT INTO nazwa_tabeli (Imię i Nazwisko, Numer komputera) VALUES(@Imię_i_Nazwisko, @Numer_komputera)";
SqlCommand objCmd = new SqlCommand(sSQL, objConn);
objConn.Open();
...

EDIT: Podejrzewam, że to jest aplikacja konsolowa, więc możesz zrobić jeszcze tak:

string nr=Convert.ToString(Console.Readline());
string nazwisko=Convert.ToString(Console.Readline());

 SqlConnection objConn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Baza_danych.mdf;Integrated Security=True;User Instance=True");
 
string sSQL = @"INSERT INTO nazwa_tabeli (Nazwisko, Numer) VALUES('" + nazwisko +"','" + nr +"')";
SqlCommand objCmd = new SqlCommand(sSQL, objConn);
try{
  objConn.Open();
  objCmd.ExecuteNonQuery();
}
catch(Exception ex){
  MessageBox.Show(ex.ToString());
}
finally{
if(objConn.State==ConnectionState.Open)
  objConn.Close();
}
0
  1. jakiś błąd, komunikat, cokolwiek???????????????????????????????????????????????????????????????????????????????????????????????????????????????????
  2. za nazywanie kolumn Imię i Nazwisko czy Numer komputera ktoś powinien Ci rączki uciąć!
  3. Open nie pomoże - open jest do zapytań wybierających dane, do zapytań zmieniających dane jest ExecuteNonQuery
0

Witam,

Problem jest taki, że nie dopisuje nowych rekordów do bazy. Nie daje żadnego błędu nic tylko nie dopisuje do bazy. I wyglada mi na to jak by cos bylo z

 objCmd.ExecuteNonQuery(); 

bo gdy dalem messagebox z komunikatem ze zakonczone dodawanie do bazy to ten messagebox sie nie pojawial a w momecie gdy nie bylo tej liniki messagebox sie pojawial.

0
string sSQL = "INSERT INTO[dbo].[Table2]([Imię i Nazwisko], [Numer komputera]) VALUES(@Imię_i_Nazwisko, @Numer_komputera)";
objCmd.Parameters.AddWithValue("@Imie_i_Nazwisko", imie_nazwisko);

Porównaj sobie nazwy parametrów.
Możesz również spróbować w tej drugiej linijce podać bez @

A Misiekd ma częściowo rację - nie rączki, a jaja.

0

Stworzylem nowa baze danych wszystko od nowa, pozmienialem nawzy kolumn w tabeli i dalej nic.

0

a zakomitowałeś zmiany?

0

Podrzucam mały przykład może Cię jakoś naprowadzi.

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ToString());
                con.Open();
            try
            {
                SqlCommand myCommand = new SqlCommand("insert into dbo.[1] (rewriting) values ('"+TextBox2.Text+"')", con);
                string myReader = (string)myCommand.ExecuteScalar();
                
            }
            catch { }
            con.Close();

Z Textboxa pobiera text i wrzuca go do kolumny rewriting w tabeli dbo.[1]. Pamiętaj o " ' " w nawiasie po values.
Pozdrawiam.

0

Zrobilem teraz taki prościutki program

using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string sConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection objConn = new SqlConnection(sConnectionString);
                objConn.Open();
                string sSql = "INSERT INTO [dbo].[Table2] ([imie]) VALUES ('sdsad')";
                SqlCommand objCmd = new SqlCommand(sSql, objConn);
                objCmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
          
            this.table2TableAdapter.Fill(this.database1DataSet.Table2);

        
        }
    }
}
 

Do bazy nic sie nie dodaje, a powinien dodawac sie ciag 'sdsad'. Baza danych utworzona o nazwie Database1.mdf, dataset o nazwie Database1DataSet.xsd.

Nie wiem jak to ogarnac.

0

Poczytaj, co to robi:
AttachDbFilename=|DataDirectory|\Database1.mdf
Nie ułatwię ci zadania, bo się niczego nie nauczysz...

0

Dzieki za wszystkie cenne rady. Udalo mi sie uporac z tym problemem. Tylko teraz mam jeszcze jeden problem. Dodalem kontrolke datagridview tylko mam taki problem ze akutalizuje sie ona dopiero przy ponownym uruchomieniu programu. Mogbym prosic o jakies wskazowki?

0

Zrób sobie odświeżanie - albo metoda Update z DataAdaptera, albo po dodaniu wiersza przeładuj bazę.

0

Niestety przeladowanie bazy i update nie dalo efektu. Nadal musze zamknac i otworzyć jeszcze raz program aby dane w datagridview sie zaktualizowaly. Ma ktos moze jakis inny pomysl?

0

GridView1.DataBind();

0
Misiekd napisał(a)

a zakomitowałeś zmiany?

0

Zobacz co masz w Form_Load. Pewnie coś w stylu .Fill(). Wywołaj to ponownie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.