2010-11-15 2 views
2

Мне было интересно, как вы можете вставлять несколько строк в базу данных MySQL, используя одно соединение вместо открытия и закрытия нескольких соединений. Вставляемые данные поступают из строки [], поэтому я использовал цикл foreach для получения каждого значения.Вставить несколько строк, используя одно и то же соединение MySQL?

Вот мои текущие нерабочие C# код:

string[] tempfin = table.Split(','); 
string username = null; 
connection.Open(); 
foreach (object hope in tempfin) 
{ 
    command.CommandText = "INSERT INTO ATable (Tried, Username) VALUES" + "('" + hope + "','" + username + "')"; 
    command.ExecuteReader(); 
} 
connection.Close(); 

Я мог бы открыть и закрыть соединение в цикле Еогеаспа, но что было доказано ненадежно мне при вставке большого количества строк, так есть способ вставить несколько строк, используя одно соединение в C#?

Обновление: Ничего, я нашел свою проблему. Это было об использовании command.ExecuteReader() вместо command.ExecuteNonQuery()

+0

Почему, по вашему мнению, вам нужно открыть и закрыть несколько соединений? –

+0

не уверен, но другие способы, с помощью которых я пытался, сохраняли ошибки mysql, такие как «существующее соединение должно быть закрыто» –

ответ

5

кода, который вы размещены уже используют только одно соединения. Я бы предложил использовать параметризованный запрос вместо того, который вы используете.

Почему ваш код не работает? Можете ли вы обновить свой вопрос с помощью ошибки, которую вы получаете?

Если вы выдаете команду вставки, вы должны использовать ExecuteNonQuery вместо ExecuteReader.

2

Вы можете сделать что-то подобное с MySQL:

INSERT INTO ATable (X, Y) VALUES (1, 2), (3, 4), (5, 6), (7, 8) 

Какие вставит 4 строки. Поэтому просто обновляйте свой код, чтобы создать один оператор и выполнить его, если вас беспокоит выполнение нескольких операторов INSERT в строке.

не уверен, но другие способы я попытался кончались returing ошибки MySQL, такие как «существующее соединение должно быть закрыто»

Это, скорее всего, потому что вы используете ExecuteReader вместо ExecuteNonQuery в Pablo Santa Cruz указал.

+0

Вы все равно должны изменить свое решение SQL к Sean, потому что оно лучше для производительности, чем выполнение нескольких запросов. – Webnet

+1

Поддерживаются ли несколько SQLParameters каким-либо образом или мне нужно создать команду insert с несколькими строками значений самостоятельно? – OneWorld

1

Там, немного почистили. Да, он использует только одно соединение.

string[] tempfin = table.Split(','); 
    string username = null; 
    try 
    { 
     connection.Open(); 
     SQLParameter parUserName = new SqlParameter("@username", System.Data.SqlDbType.VarChar,100); 
     if(username != null) parUserName.Value = username; else parUserName.Value = DBNull.Value; 

     SQLParameter parHope = new SqlParameter("@hope", System.Data.SqlDbType.VarChar,256); 

     command.Parameters.Add(parUserName); 
     command.Parameters.Add(parHope); 

     command.CommandText = "INSERT INTO ATable (Tried, Username) VALUES (@hope,@username)"; 
     foreach (string hope in tempfin) 
     { 
      parHope.Value = hope; 
      command.ExecuteNonQuery(); 
     } 
    } 
    finally{ 
     if (connection.State != System.Data.ConnectionState.Closed) 
      connection.Close(); 
     if(command != null) 
      command.Dispose(); 
    } 
Смежные вопросы