2014-01-24 3 views
0

Я работаю над некоторым кодом, чтобы попытаться получить мой массив, введенный пользователем для подключения и отправки на SQL Server 2012. Мне сказали использовать все эти команды для подключения к базе данных.Использование C# для подключения и вставки в SQL Server 2012

Одна из моих проблем заключается в том, что я просматривал переполнение стека, и все предлагают использовать параметры вместо конкатенации, чтобы избежать инъекции SQL, но это для моего класса, и мы всего лишь 2 недели на C#, поэтому я не думаю, ему понравится, если я буду использовать параметры.

Я думаю, что моя попытка поймать не так, верхняя половина заполнена красными линиями и как вы используете команду INSERT с циклом for?

protected void btnDisplay_Click(object sender, EventArgs e) 
{ 
    //try 
    //{ 
     // System.Data.SqlClient.SqlConnection varname1 = new System.Data.SqlClient.SqlConnection(); 
     // varname1 = "server = LOCALHOST"; Database = Lab1; Trusted_connection = yes; 
     // varname1.Open(); 
     // System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
     // cmd.Connection = conn; 
     // cmd.CommandText = "Delete From Student"; 
     // cmd.ExecuteNonQuery(); 
    //  
    string sql = null; 
    for(int i=0; counter1 >= i; i++) 
    { 
     sql += "INSERT into Student VALUES(" + StudentId + Name + Address); 
    } 
    varname1.Close(); 
    //} 
    catch (SqlException ex) 
    { 
     MessageBox.Show("Database failed" + ex.Message); 
    } 
} 
+0

Что такое 'counter1'? – SLaks

+3

Ничего себе, с чего начать .. –

+0

'catch' для ** исправления ошибок **. 'MessageBox.Show' не исправляет ошибки, поэтому ваш код ошибочен. –

ответ

6

Итак, есть немало проблем с этим кодом. Лучше всего потратить на это еще час, а затем задать любые конкретные вопросы, которые вы не можете понять. Позвольте мне дать вам несколько быстрых указателей.

  1. У вас есть catch() блока, но соответствующий try блок закомментирован. Это приведет к ошибке компилятора. Похоже, вы просто отлаживали некоторые вещи, так что ничего страшного. Однако, как правило, целесообразно опубликовать действительный код, который вы пытаетесь запустить.

  2. Вы инициализируете строку до null, но вы конкатенируете до конца. Это приведет к ошибке выполнения. Вместо этого вы должны инициализировать свою строку до String.Empty. Кроме того, посмотрите на класс StringBuilder, если вы делаете большое количество конкатенации строк, так как это намного быстрее.

  3. Вы (теоретически) строят строку SQL, но никогда ее не запускаете. Вы также не возвращаете значение ни к чему, что могло бы его запустить.

  4. Ваше заявление INSERT недействительно. У вас нет соответствующего конца ) в инструкции INSERT, и после ваших переменных вы получите rogue ), что приведет к ошибке компилятора. Вы также просто сбрасываете все переменные вместе, без кавычек или запятых между ними. Вы, наверное, хотите что-то подобное:

    sql += String.Format("INSERT into Student VALUES('{0}', '{1}', '{2}');", StudentId, Name, Address);

  5. Используйте параметризованные запросы. Всегда. Кто заботится о том, что говорит ваш учитель. Если вы этого не сделаете, по крайней мере, сначала проверьте строки для апострофов, так как они испортят ваш оператор SQL, преждевременно завершая строку.

  6. Ваша петля, похоже, не имеет большого смысла. Что такое counter1? Какую ценность у него есть? Даже если оно настроено на положительное значение, все, что вы делаете, - это повторение одной и той же строки SQL, поскольку значения внутри цикла не изменяются. Непонятно, что вы пытаетесь сделать здесь.

  7. Вы вызываете varname1.Close();, но вы прокомментировали объявление varname1, что приведет к ошибке компилятора.

Надеюсь, это поможет!

+0

Красивый подробный !. +1 –

0

Это то, что вам нужно. Возможно, вам придется адаптировать некоторые из них.Извините, если он полностью работает, на данный момент нет отладчика.

class Data { 
    public int StudentId {get;set;} 
    public string Name {get;set;} 
    public string Address {get;set;} 
} 

protected void btnDisplay_Click(object sender, EventArgs e) 
{ 
    var datas = new List<Data>(); 
    try 
    { 
     StringBuilder sql = new StringBuilder(); 
     foreach(data in datas) 
     { 
      sql.Append(String.Format("INSERT into Student VALUES({0},'{1}','{2}') ",data.UserId,data.Name,data.Address)); 
     } 

     var sqlConnection = new SqlConnection(@"Data Source=LOCALHOST;Initial Catalog=Lab1;Trusted_Connection=True;"); 
     sqlConnection.Open(); 
     var command = new SqlCommand(sql.ToString(),sqlConnection); 
     command..ExecuteNonQuery(); 
     sqlConnection.Close(); 

    } 
    catch(SqlException ex){ 
     MessageBox.Show("Database failed" + ex.Message); 
    } 
} 
Смежные вопросы