2016-09-20 2 views
0

У меня есть код, который используется для добавления некоторых строк в SQL, но это не сработает. Select и Delete работают, но не команда ALTER TABLE.C# Sql Клиент: ALTER Таблица не работает

Если я копирую и вставляю только мой вывод на консоль в Microsoft Management Sql Query, он работает. (tmp1 наполняется какой-то имя, tmp2 заполняется для примера CHAR (50))

Edit: я не получаю какой-либо ошибки, в журналах моего SQL сервера я не вижу, любая команда под названием «Alter», чтобы быть excuted.

string tmp1, tmp2; 
tmp1 = addfrm.getTableName(); 
tmp2 = addfrm.getType(); 

string constring = @"Data Source=" + adr + ";Initial Catalog=" + dat + ";User ID=" + user + ";Password=" + pwd; 
try 
{ 
    using (SqlConnection con = new SqlConnection(constring)) 
    { 
     string tmp = @"ALTER TABLE " + tbl + " ADD " + tmp1 + " " + tmp2; 
     Console.WriteLine("Mein Befehl lautet: " + tmp); 

     using (SqlCommand cmd = new SqlCommand(tmp, con)) 
     { 
      cmd.CommandType = CommandType.Text; 
      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
      { 
      } 
     } 
    } 
} 

catch (SqlException) 
{ 
    MessageBox.Show("Fehler"); 
} 
+3

Какая ошибка вы получаете? Отправьте также свою ошибку. –

+0

Эта команда звучит так, будто вы пытаетесь добавить несколько столбцов в таблицу, чтобы не добавлять строки. –

+0

Вы никогда не выполняли SQL-запрос в базе данных. Используйте 'ExecuteNonQuery' на' SqlCommand'. –

ответ

1

Вы не отправляете SQL-запрос в базу данных. Используйте ExecuteNonQuery в SqlCommand. Вместо того, чтобы:

using (SqlCommand cmd = new SqlCommand(tmp, con)) 
{ 
    cmd.CommandType = CommandType.Text; 
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
    { 

    } 
} 

использование

using (SqlCommand cmd = new SqlCommand(tmp, con)) 
{ 
    cmd.ExecuteNonQuery(); 
} 

адаптер не будет выполнять запрос до adapter.Fill называется.

+0

Можете ли вы также объяснить, почему он не будет работать с' SqlDataAdapter'. Могут ли быть сделаны какие-либо изменения, так что он работает с 'SqlDataAdapter' – GauravKP

+0

' SqlDataAdapter' предназначен для работы с CRUD-операциями. Не нужно использовать его при выполнении DDL. –

+0

Это доцент для меня что-то делает. Я не получаю никаких ошибок или исключений. – FeuFeuAngel

0

Неправильно заданы значения. Попробуйте это, он должен работать.

string tmp1, tmp2; 
       tmp1 = addfrm.getTableName(); 
       tmp2 = addfrm.getType(); 

       string constring = @"Data Source=" + adr + ";Initial Catalog=" + dat + ";User ID=" + user + ";Password=" + pwd; 
       try 
       { 
        using (SqlConnection con = new SqlConnection(constring)) 
        { 
         string tmp = @"UPDATE TABLE " + tbl + " SET Col1 = '" + temp1 +"',Col2='" + tmp2 +"'"; 

         Console.WriteLine("Mein Befehl lautet: " + tmp); 

         using (SqlCommand cmd = new SqlCommand(tmp, con)) 
         { 
          cmd.CommandType = CommandType.Text; 
          using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
          { 
    cmd.ExecuteNonQuery(); 
          } 
         } 
        } 
       } 
       catch (SqlException) { MessageBox.Show("Fehler"); } 
+0

Это не сработало:/тот же результат для меня (вы забыли + и написали temp, я исправил эту надежду, что все в порядке) – FeuFeuAngel

+0

должно быть ОБНОВЛЕНО, а не изменять. Я обновил ответ, пожалуйста, проверьте сейчас. –

+0

Теперь у него есть некоторые проблемы с ur Excute NonQuerry. Программа останавливается с ошибкой, что соединения все еще закрыты. Я попытался открыть его с помощью con.Open(); и закрыл его как sqlnonquerry, но я получил SQL Exception с «System.Data.SqlClient.SqlException» в System.Data.dll. – FeuFeuAngel

0

Я просто избегал его теперь с помощью заливки. Это немного грязно, но нормально. Спасибо, что сказал Павел.

      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
         { 
          DataTable dt = new DataTable(); 
          sda.Fill(dt); 
         } 
Смежные вопросы