Create Table Windows Forms App

0

hej, posiadam stworzonego graficznie kreatora dodawania tabeli do bazy. Problem polega na tym że gdy używam
SqlCommand.Parameters.AddWithValue() wyskakuje mi błąd... i nie można stworzyć tabeli.

private void button2_Click(object sender, EventArgs e)
        {
            #region create table baza 
            using (SqlConnection con = new SqlConnection("Data Source = localhost\\SQLEXPRESS; Initial Catalog = loginapp;integrated security=SSPI"))
            {
                con.Open();
                try
                {
                    using (SqlCommand cmd = new SqlCommand("CREATE TABLE @nazwa(@kol @typ);", con))
                    {
                        // przy dodaniu parameters wyskakuje blad
                        cmd.Parameters.AddWithValue("@nazwa", naztabTB.Text); // textbox
                        cmd.Parameters.Add("@kol", select1TB.Text); // textbox
                        cmd.Parameters.Add("@typ", typkolumny1.SelectedItem); // combobox z podanymi na sztywno wartosciami
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Udało się");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("error");
                }
                finally
                {
                    con.Close();
                }
            }
            #endregion
        }
0

Mamy przewidzieć, jaki błąd dostajesz, czy łaskawie go nam pokażesz? I wrzuć kod w znaczniki C# i dobrze go sformatuj.

0

Nie dostaje błędu. Błąd wyskakuje z catch() i tabela się nie dodaje do bazy.

0

Matko. Masz tam coś takiego jak Exception, widzisz? W zmiennej ex masz wszystkie rzeczy dotyczące błędu :/

2

nie możesz nazwy tabeli przekazać jako parametru - tak się nie da. Parametry są jedynie dla DML nie dla DDL

0

Dzięki, Właśnie patrzałem Exception i pisze Incorrect syntax near '@nazwa'. Teraz wyjaśniłeś :d A da się jakoś zrobić tak żeby user podawał nazwę tabeli i ona się tworzyła z tą nazwą?

1
string sql = string.Format("CREATE TABLE {0} ({1} {2});", naztabTB.Text, select1TB.Text, typkolumny1.SelectedItem);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Udało się");
}
...

tylko, że musisz pilnować tego co userzy do textboxów wprowadzają bo możesz sobie krzywdę zrobić

0

Dzięki, jakieś konkretne zagrożenia mógłbyś napisać np.?

0

kliknij sobie na link @john_klamka A do poczytania hasło dla googla SQL injection

0

Na przykład ktoś Ci wpisze jako ten parametr ";DROP TABlE jakas_tabela" to będzie słabo :P

0

oki dzięki :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1